home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 July: Mac OS SDK / Dev.CD Jul 97 SDK2.toast / Development Kits (Disc 2) / QuickTime / QuickTime™ 2.5 / Interfaces for Programmers / AIncludes / QuickTimeMusic.a < prev   
Encoding:
Text File  |  1997-02-26  |  76.0 KB  |  2,654 lines  |  [TEXT/MPS ]

  1. ;
  2. ;    File:        QuickTimeMusic.a
  3. ;
  4. ;    Contains:    QuickTime interfaces
  5. ;
  6. ;    Version:    Technology:    
  7. ;                Release:    QuickTime 2.5 interfaces to use with ETO #20
  8. ;
  9. ;    Copyright:    © 1984-1996 by Apple Computer, Inc.  All rights reserved.
  10. ;
  11. ;    Bugs?:        If you find a problem with this file, send the file and version
  12. ;                information (from above) and the problem description to:
  13. ;
  14. ;                    Internet:    apple.bugs@applelink.apple.com
  15. ;                    AppleLink:    APPLE.BUGS
  16. ;
  17. ;
  18.     IF &TYPE('__QUICKTIMEMUSIC__') = 'UNDEFINED' THEN
  19. __QUICKTIMEMUSIC__ SET 1
  20.  
  21.     IF &TYPE('__COMPONENTS__') = 'UNDEFINED' THEN
  22.     include 'Components.a'
  23.     ENDIF
  24.     IF &TYPE('__IMAGECOMPRESSION__') = 'UNDEFINED' THEN
  25.     include 'ImageCompression.a'
  26.     ENDIF
  27.     IF &TYPE('__MOVIES__') = 'UNDEFINED' THEN
  28.     include 'Movies.a'
  29.     ENDIF
  30.     IF &TYPE('__QUICKDRAW__') = 'UNDEFINED' THEN
  31.     include 'Quickdraw.a'
  32.     ENDIF
  33.     IF &TYPE('__VIDEO__') = 'UNDEFINED' THEN
  34.     include 'Video.a'
  35.     ENDIF
  36.     IF &TYPE('__MEMORY__') = 'UNDEFINED' THEN
  37.     include 'Memory.a'
  38.     ENDIF
  39.     IF &TYPE('__SOUND__') = 'UNDEFINED' THEN
  40.     include 'Sound.a'
  41.     ENDIF
  42.  
  43. kaiToneDescType                    EQU        'tone'
  44. kaiNoteRequestInfoType            EQU        'ntrq'
  45. kaiKnobListType                    EQU        'knbl'
  46. kaiKeyRangeInfoType                EQU        'sinf'
  47. kaiSampleDescType                EQU        'sdsc'
  48. kaiSampleInfoType                EQU        'smin'
  49. kaiSampleDataType                EQU        'sdat'
  50. kaiInstInfoType                    EQU        'iinf'
  51. kaiPictType                        EQU        'pict'
  52. kaiWriterType                    EQU        '©wrt'
  53. kaiCopyrightType                EQU        '©cpy'
  54. kaiOtherStrType                    EQU        'str '
  55. kaiInstrumentRefType            EQU        'iref'
  56. kaiLibraryInfoType                EQU        'linf'
  57. kaiLibraryDescType                EQU        'ldsc'
  58. InstLibDescRec            RECORD 0
  59. libIDName                 ds        Str31            ; offset: $0 (0)
  60. sizeof                     EQU *                    ; size:   $20 (32)
  61.                         ENDR
  62. InstKnobRec                RECORD 0
  63. number                     ds.l    1                ; offset: $0 (0)
  64. value                     ds.l    1                ; offset: $4 (4)
  65. sizeof                     EQU *                    ; size:   $8 (8)
  66.                         ENDR
  67.  
  68. kInstKnobMissingUnknown            EQU        0
  69. kInstKnobMissingDefault            EQU        $01
  70. InstKnobList            RECORD 0
  71. knobCount                 ds.l    1                ; offset: $0 (0)
  72. knobFlags                 ds.l    1                ; offset: $4 (4)
  73. knob                     ds        InstKnobRec        ; offset: $8 (8) <-- really an array of length one
  74. sizeof                     EQU *                    ; size:   $10 (16)
  75.                         ENDR
  76.  
  77. kMusicLoopTypeNormal            EQU        0
  78. kMusicLoopTypePalindrome        EQU        1                    ; back & forth
  79.  
  80. instSamplePreProcessFlag        EQU        $01
  81. InstSampleDescRec        RECORD 0
  82. dataFormat                 ds.l    1                ; offset: $0 (0)
  83. numChannels                 ds.w    1                ; offset: $4 (4)
  84. sampleSize                 ds.w    1                ; offset: $6 (6)
  85. sampleRate                 ds.l    1                ; offset: $8 (8)
  86. sampleDataID             ds.w    1                ; offset: $C (12)
  87. offset                     ds.l    1                ; offset: $E (14)        ;  offset within SampleData - this could be just for internal use
  88. numSamples                 ds.l    1                ; offset: $12 (18)        ;  this could also just be for internal use, we'll see
  89. loopType                 ds.l    1                ; offset: $16 (22)
  90. loopStart                 ds.l    1                ; offset: $1A (26)
  91. loopEnd                     ds.l    1                ; offset: $1E (30)
  92. pitchNormal                 ds.l    1                ; offset: $22 (34)
  93. pitchLow                 ds.l    1                ; offset: $26 (38)
  94. pitchHigh                 ds.l    1                ; offset: $2A (42)
  95. sizeof                     EQU *                    ; size:   $2E (46)
  96.                         ENDR
  97. ; typedef Handle                         AtomicInstrument
  98.  
  99. ; typedef Ptr                             AtomicInstrumentPtr
  100.  
  101.  
  102. kMusicComponentType                EQU        'musi'
  103.  
  104. kSoftSynthComponentSubType        EQU        'ss  '
  105. kGMSynthComponentSubType        EQU        'gm  '
  106. ; typedef ComponentInstance             MusicComponent
  107.  
  108. ;  MusicSynthesizerFlags
  109.  
  110. kSynthesizerDynamicVoice        EQU        $01                    ; can assign voices on the fly (else, polyphony is very important 
  111. kSynthesizerUsesMIDIPort        EQU        $02                    ; must be patched through MIDI Manager 
  112. kSynthesizerMicrotone            EQU        $04                    ; can play microtonal scales 
  113. kSynthesizerHasSamples            EQU        $08                    ; synthesizer has some use for sampled data 
  114. kSynthesizerMixedDrums            EQU        $10                    ; any part can play drum parts, total = instrument parts 
  115. kSynthesizerSoftware            EQU        $20                    ; implemented in main CPU software == uses cpu cycles 
  116. kSynthesizerHardware            EQU        $40                    ; is a hardware device (such as nubus, or maybe DSP?) 
  117. kSynthesizerDynamicChannel        EQU        $80                    ; can move any part to any channel or disable each part. (else we assume it lives on all channels in masks) 
  118. kSynthesizerHogsSystemChannel    EQU        $0100                ; can be channelwise dynamic, but always responds on its system channel 
  119. kSynthesizerSlowSetPart            EQU        $0400                ; SetPart() and SetPartInstrumentNumber() calls do not have rapid response, may glitch notes 
  120. kSynthesizerOffline                EQU        $1000                ; can enter an offline synthesis mode 
  121. kSynthesizerGM                    EQU        $4000                ; synth is a GM device 
  122. kSynthesizerSoundLocalization    EQU        $00010000            ; synth is a GM device 
  123. ;
  124. ; * Note that these controller numbers
  125. ; * are _not_ identical to the MIDI controller numbers.
  126. ; * These are _signed_ 8.8 values, and the LSB's are
  127. ; * always sent to a MIDI device. Controllers 32-63 are
  128. ; * reserved (for MIDI, they are LSB's for 0-31, but we
  129. ; * always send both).
  130. ; *
  131. ; * The full range, therefore, is -128.00 to 127.7f.
  132. ; *
  133. ; * _Excepting_ _volume_, all controls default to zero.
  134. ; *
  135. ; * Pitch bend is specified in fractional semitones! No
  136. ; * more "pitch bend range" nonsense. You can bend as far
  137. ; * as you want, any time you want.
  138. ;
  139. ; typedef SInt32                         MusicController
  140.  
  141.  
  142. kControllerModulationWheel        EQU        1
  143. kControllerBreath                EQU        2
  144. kControllerFoot                    EQU        4
  145. kControllerPortamentoTime        EQU        5                    ; portamento on/off is omitted, 0 time = 'off' 
  146. kControllerVolume                EQU        7
  147. kControllerBalance                EQU        8
  148. kControllerPan                    EQU        10                    ; 0 - "default", 1 - n: positioned in output 1-n (incl fractions) 
  149. kControllerExpression            EQU        11
  150. kControllerLever1                EQU        16                    ; general purpose controllers 
  151. kControllerLever2                EQU        17                    ; general purpose controllers 
  152. kControllerLever3                EQU        18                    ; general purpose controllers 
  153. kControllerLever4                EQU        19                    ; general purpose controllers 
  154. kControllerLever5                EQU        80                    ; general purpose controllers 
  155. kControllerLever6                EQU        81                    ; general purpose controllers 
  156. kControllerLever7                EQU        82                    ; general purpose controllers 
  157. kControllerLever8                EQU        83                    ; general purpose controllers 
  158. kControllerPitchBend            EQU        32                    ; positive & negative semitones, with 7 bits fraction 
  159. kControllerAfterTouch            EQU        33                    ; aka channel pressure 
  160. kControllerSustain                EQU        64                    ; boolean - positive for on, 0 or negative off 
  161. kControllerSostenuto            EQU        66                    ; boolean 
  162. kControllerSoftPedal            EQU        67                    ; boolean 
  163. kControllerReverb                EQU        91
  164. kControllerTremolo                EQU        92
  165. kControllerChorus                EQU        93
  166. kControllerCeleste                EQU        94
  167. kControllerPhaser                EQU        95
  168. kControllerEditPart                EQU        113                    ; last 16 controllers 113-128 and above are global controllers which respond on part zero 
  169. kControllerMasterTune            EQU        114
  170.  
  171. kControllerMaximum                EQU        $7FFF                ; +01111111.11111111 
  172. kControllerMinimum                EQU        $8000                ; -10000000.00000000 
  173. SynthesizerDescription    RECORD 0
  174. synthesizerType             ds.l    1                ; offset: $0 (0)        ;  synthesizer type (must be same as component subtype) 
  175. name                     ds        Str31            ; offset: $4 (4)        ;  text name of synthesizer type 
  176. flags                     ds.l    1                ; offset: $24 (36)        ;  from the above enum 
  177. voiceCount                 ds.l    1                ; offset: $28 (40)        ;  maximum polyphony 
  178. partCount                 ds.l    1                ; offset: $2C (44)        ;  maximum multi-timbrality (and midi channels) 
  179. instrumentCount             ds.l    1                ; offset: $30 (48)        ;  non gm, built in (rom) instruments only 
  180. modifiableInstrumentCount  ds.l    1                ; offset: $34 (52)        ;  plus n-more are user modifiable 
  181. channelMask                 ds.l    1                ; offset: $38 (56)        ;  (midi device only) which channels device always uses 
  182. drumPartCount             ds.l    1                ; offset: $3C (60)        ;  maximum multi-timbrality of drum parts 
  183. drumCount                 ds.l    1                ; offset: $40 (64)        ;  non gm, built in (rom) drumkits only 
  184. modifiableDrumCount         ds.l    1                ; offset: $44 (68)        ;  plus n-more are user modifiable 
  185. drumChannelMask             ds.l    1                ; offset: $48 (72)        ;  (midi device only) which channels device always uses 
  186. outputCount                 ds.l    1                ; offset: $4C (76)        ;  number of audio outputs (usually two) 
  187. latency                     ds.l    1                ; offset: $50 (80)        ;  response time in µSec 
  188. controllers                 ds.l    4                ; offset: $54 (84)        ;  array of 128 bits 
  189. gmInstruments             ds.l    4                ; offset: $64 (100)        ;  array of 128 bits 
  190. gmDrums                     ds.l    4                ; offset: $74 (116)        ;  array of 128 bits 
  191. sizeof                     EQU *                    ; size:   $84 (132)
  192.                         ENDR
  193.  
  194. kVoiceCountDynamic                EQU        -1                    ; constant to use to specify dynamic voicing 
  195. ToneDescription            RECORD 0
  196. synthesizerType             ds.l    1                ; offset: $0 (0)        ;  synthesizer type 
  197. synthesizerName             ds        Str31            ; offset: $4 (4)        ;  name of instantiation of synth 
  198. instrumentName             ds        Str31            ; offset: $24 (36)        ;  preferred name for human use 
  199. instrumentNumber         ds.l    1                ; offset: $44 (68)        ;  inst-number used if synth-name matches 
  200. gmNumber                 ds.l    1                ; offset: $48 (72)        ;  Best matching general MIDI number 
  201. sizeof                     EQU *                    ; size:   $4C (76)
  202.                         ENDR
  203.  
  204. kFirstDrumkit                    EQU        16384                ; (first value is "no drum". instrument numbers from 16384->16384+128 are drumkits, and for GM they are _defined_ drumkits! 
  205. kLastDrumkit                    EQU        16512
  206. ;  InstrumentMatch
  207.  
  208. kInstrumentMatchSynthesizerType    EQU        1
  209. kInstrumentMatchSynthesizerName    EQU        2
  210. kInstrumentMatchName            EQU        4
  211. kInstrumentMatchNumber            EQU        8
  212. kInstrumentMatchGMNumber        EQU        16
  213. ;  KnobFlags
  214.  
  215. kKnobReadOnly                    EQU        16                    ; knob value cannot be changed by user or with a SetKnob call 
  216. kKnobInterruptUnsafe            EQU        32                    ; only alter this knob from foreground task time (may access toolbox) 
  217. kKnobKeyrangeOverride            EQU        64                    ; knob can be overridden within a single keyrange (software synth only) 
  218. kKnobGroupStart                    EQU        128                    ; knob is first in some logical group of knobs 
  219. kKnobFixedPoint8                EQU        1024
  220. kKnobFixedPoint16                EQU        2048                ; One of these may be used at a time. 
  221. kKnobTypeNumber                    EQU        $00
  222. kKnobTypeGroupName                EQU        $1000                ; "knob" is really a group name for display purposes 
  223. kKnobTypeBoolean                EQU        $2000                ; if range is greater than 1, its a multi-checkbox field 
  224. kKnobTypeNote                    EQU        $3000                ; knob range is equivalent to MIDI keys 
  225. kKnobTypePan                    EQU        $4000                ; range goes left/right (lose this? ) 
  226. kKnobTypeInstrument                EQU        $5000                ; knob value = reference to another instrument number 
  227. kKnobTypeSetting                EQU        $6000                ; knob value is 1 of n different things (eg, fm algorithms) popup menu 
  228. kKnobTypeMilliseconds            EQU        $7000                ; knob is a millisecond time range 
  229. kKnobTypePercentage                EQU        $8000                ; knob range is displayed as a Percentage 
  230. kKnobTypeHertz                    EQU        $9000                ; knob represents frequency 
  231. kKnobTypeButton                    EQU        $A000                ; momentary trigger push button 
  232.  
  233. kUnknownKnobValue                EQU        $7FFFFFFF            ; a knob with this value means, we don't know it. 
  234. kDefaultKnobValue                EQU        $7FFFFFFE            ; used to SET a knob to its default value. 
  235. KnobDescription            RECORD 0
  236. name                     ds        Str63            ; offset: $0 (0)
  237. lowValue                 ds.l    1                ; offset: $40 (64)
  238. highValue                 ds.l    1                ; offset: $44 (68)
  239. defaultValue             ds.l    1                ; offset: $48 (72)        ;  a default instrument is made of all default values 
  240. flags                     ds.l    1                ; offset: $4C (76)
  241. knobID                     ds.l    1                ; offset: $50 (80)
  242. sizeof                     EQU *                    ; size:   $54 (84)
  243.                         ENDR
  244. GCInstrumentData        RECORD 0
  245. tone                     ds        ToneDescription ; offset: $0 (0)
  246. knobCount                 ds.l    1                ; offset: $4C (76)
  247. knob                     ds.l    1                ; offset: $50 (80) <-- really an array of length one
  248. sizeof                     EQU *                    ; size:   $54 (84)
  249.                         ENDR
  250. ; typedef struct GCInstrumentData *        GCInstrumentDataPtr
  251.  
  252. ; typedef GCInstrumentDataPtr *            GCInstrumentDataHandle
  253.  
  254. InstrumentAboutInfo        RECORD 0
  255. p                         ds.l    1                ; offset: $0 (0)
  256. author                     ds        Str255            ; offset: $4 (4)
  257. copyright                 ds        Str255            ; offset: $104 (260)
  258. other                     ds        Str255            ; offset: $204 (516)
  259. sizeof                     EQU *                    ; size:   $304 (772)
  260.                         ENDR
  261.  
  262. kMusicPacketPortLost            EQU        1                    ; received when application loses the default input port 
  263. kMusicPacketPortFound            EQU        2                    ; received when application gets it back out from under someone else's claim 
  264. kMusicPacketTimeGap                EQU        3                    ; data[0] = number of milliseconds to keep the MIDI line silent 
  265. MusicMIDIPacket            RECORD 0
  266. length                     ds.w    1                ; offset: $0 (0)
  267. reserved                 ds.l    1                ; offset: $2 (2)        ;  if length zero, then reserved = above enum 
  268. data                     ds.b    249                ; offset: $6 (6)
  269.                          ORG 256
  270. sizeof                     EQU *                    ; size:   $100 (256)
  271.                         ENDR
  272.  
  273. notImplementedMusicErr            EQU        $8000F7E9
  274. cantSendToSynthesizerErr        EQU        $8000F7E8
  275. cantReceiveFromSynthesizerErr    EQU        $8000F7E7
  276. illegalVoiceAllocationErr        EQU        $8000F7E6
  277. illegalPartErr                    EQU        $8000F7E5
  278. illegalChannelErr                EQU        $8000F7E4
  279. illegalKnobErr                    EQU        $8000F7E3
  280. illegalKnobValueErr                EQU        $8000F7E2
  281. illegalInstrumentErr            EQU        $8000F7E1
  282. illegalControllerErr            EQU        $8000F7E0
  283. midiManagerAbsentErr            EQU        $8000F7DF
  284. synthesizerNotRespondingErr        EQU        $8000F7DE
  285. synthesizerErr                    EQU        $8000F7DD
  286. illegalNoteChannelErr            EQU        $8000F7DC
  287. noteChannelNotAllocatedErr        EQU        $8000F7DB
  288. tunePlayerFullErr                EQU        $8000F7DA
  289. tuneParseErr                    EQU        $8000F7D9
  290.  
  291. kGetAtomicInstNoExpandedSamples    EQU        $01
  292. kGetAtomicInstNoOriginalSamples    EQU        $02
  293. kGetAtomicInstNoSamples            EQU        $03
  294. kGetAtomicInstNoKnobList        EQU        $04
  295. kGetAtomicInstNoInstrumentInfo    EQU        $08
  296. kGetAtomicInstOriginalKnobList    EQU        $10
  297. kGetAtomicInstAllKnobs            EQU        $20                    ; return even those that are set to default
  298. ;
  299. ; For non-gm instruments, instrument number of tone description == 0
  300. ; If you want to speed up while running, slam the inst num with what Get instrument number returns
  301. ; All missing knobs are slammed to the default value
  302. ;
  303.  
  304. kSetAtomicInstKeepOriginalInstrument EQU $01
  305. kSetAtomicInstShareAcrossParts    EQU        $02                    ; inst disappears when app goes away
  306. kSetAtomicInstCallerTosses        EQU        $04                    ; the caller isn't keeping a copy around (for NASetAtomicInstrument)
  307. kSetAtomicInstCallerGuarantees    EQU        $08                    ; the caller guarantees a copy is around
  308. kSetAtomicInstInterruptSafe        EQU        $10                    ; dont move memory at this time (but process at next task time)
  309. kSetAtomicInstDontPreprocess    EQU        $80                    ; perform no further preprocessing because either 1)you know the instrument is digitally clean, or 2) you got it from a GetPartAtomic
  310.  
  311. kInstrumentNamesModifiable        EQU        1
  312. kInstrumentNamesBoth            EQU        2
  313. ;
  314. ; * Structures specific to the GenericMusicComponent
  315. ;
  316.  
  317. kGenericMusicComponentSubtype    EQU        'gene'
  318. GenericKnobDescription    RECORD 0
  319. kd                         ds        KnobDescription ; offset: $0 (0)
  320. hw1                         ds.l    1                ; offset: $54 (84)        ;  driver defined 
  321. hw2                         ds.l    1                ; offset: $58 (88)        ;  driver defined 
  322. hw3                         ds.l    1                ; offset: $5C (92)        ;  driver defined 
  323. settingsID                 ds.l    1                ; offset: $60 (96)        ;  resource ID list for boolean and popup names 
  324. sizeof                     EQU *                    ; size:   $64 (100)
  325.                         ENDR
  326. GenericKnobDescriptionList RECORD 0
  327. knobCount                 ds.l    1                ; offset: $0 (0)
  328. knob                     ds        GenericKnobDescription ; offset: $4 (4) <-- really an array of length one
  329. sizeof                     EQU *                    ; size:   $68 (104)
  330.                         ENDR
  331. ; typedef struct GenericKnobDescriptionList * GenericKnobDescriptionListPtr
  332.  
  333. ; typedef GenericKnobDescriptionListPtr * GenericKnobDescriptionListHandle
  334.  
  335. ;  knobTypes for MusicDerivedSetKnob 
  336.  
  337. kGenericMusicKnob                EQU        1
  338. kGenericMusicInstrumentKnob        EQU        2
  339. kGenericMusicDrumKnob            EQU        3
  340. kGenericMusicGlobalController    EQU        4
  341.  
  342. kGenericMusicResFirst            EQU        0
  343. kGenericMusicResMiscStringList    EQU        1                    ; STR# 1: synth name, 2:about author,3:aboutcopyright,4:aboutother 
  344. kGenericMusicResMiscLongList    EQU        2                    ; Long various params, see list below 
  345. kGenericMusicResInstrumentList    EQU        3                    ; NmLs of names and shorts, categories prefixed by '••' 
  346. kGenericMusicResDrumList        EQU        4                    ; NmLs of names and shorts 
  347. kGenericMusicResInstrumentKnobDescriptionList EQU 5            ; Knob 
  348. kGenericMusicResDrumKnobDescriptionList EQU 6                ; Knob 
  349. kGenericMusicResKnobDescriptionList EQU    7                    ; Knob 
  350. kGenericMusicResBitsLongList    EQU        8                    ; Long back to back bitmaps of controllers, gminstruments, and drums 
  351. kGenericMusicResModifiableInstrumentHW EQU 9                ; Shrt same as the hw shorts trailing the instrument names, a shortlist 
  352. kGenericMusicResGMTranslation    EQU        10                    ; Long 128 long entries, 1 for each gm inst, of local instrument numbers 1-n (not hw numbers) 
  353. kGenericMusicResROMInstrumentData EQU    11                    ; knob lists for ROM instruments, so the knob values may be known 
  354. kGenericMusicResAboutPICT        EQU        12                    ; picture for aboutlist. must be present for GetAbout call to work 
  355. kGenericMusicResLast            EQU        13
  356. ;  elements of the misc long list 
  357.  
  358. kGenericMusicMiscLongFirst        EQU        0
  359. kGenericMusicMiscLongVoiceCount    EQU        1
  360. kGenericMusicMiscLongPartCount    EQU        2
  361. kGenericMusicMiscLongModifiableInstrumentCount EQU 3
  362. kGenericMusicMiscLongChannelMask EQU    4
  363. kGenericMusicMiscLongDrumPartCount EQU    5
  364. kGenericMusicMiscLongModifiableDrumCount EQU 6
  365. kGenericMusicMiscLongDrumChannelMask EQU 7
  366. kGenericMusicMiscLongOutputCount EQU    8
  367. kGenericMusicMiscLongLatency    EQU        9
  368. kGenericMusicMiscLongFlags        EQU        10
  369. kGenericMusicMiscLongFirstGMHW    EQU        11                    ; number to add to locate GM main instruments 
  370. kGenericMusicMiscLongFirstGMDrumHW EQU    12                    ; number to add to locate GM drumkits 
  371. kGenericMusicMiscLongFirstUserHW EQU    13                    ; First hw number of user instruments (presumed sequential) 
  372. kGenericMusicMiscLongLast        EQU        14
  373. GCPart                    RECORD 0
  374. hwInstrumentNumber         ds.l    1                ; offset: $0 (0)        ;  internal number of recalled instrument 
  375. controller                 ds.w    128                ; offset: $4 (4)        ;  current values for all controllers 
  376. volume                     ds.l    1                ; offset: $104 (260)    ;  ctrl 7 is special case 
  377. polyphony                 ds.l    1                ; offset: $108 (264)
  378. midiChannel                 ds.l    1                ; offset: $10C (268)    ;  1-16 if in use 
  379. id                         ds        GCInstrumentData ; offset: $110 (272)    ;  ToneDescription & knoblist, uncertain length 
  380. sizeof                     EQU *                    ; size:   $164 (356)
  381.                         ENDR
  382. ;
  383. ; * Calls specific to the GenericMusicComponent
  384. ;
  385.  
  386. kMusicGenericRange                EQU        $0100
  387. kMusicDerivedRange                EQU        $0200
  388. ;
  389. ; * Flags in GenericMusicConfigure call
  390. ;
  391.  
  392. kGenericMusicDoMIDI                EQU        $01                    ; implement normal MIDI messages for note, controllers, and program changes 0-127 
  393. kGenericMusicBank0                EQU        $02                    ; implement instrument bank changes on controller 0 
  394. kGenericMusicBank32                EQU        $04                    ; implement instrument bank changes on controller 32 
  395. kGenericMusicErsatzMIDI            EQU        $08                    ; construct MIDI packets, but send them to the derived component 
  396. kGenericMusicCallKnobs            EQU        $10                    ; call the derived component with special knob format call 
  397. kGenericMusicCallParts            EQU        $20                    ; call the derived component with special part format call 
  398. kGenericMusicCallInstrument        EQU        $40                    ; call MusicDerivedSetInstrument for MusicSetInstrument calls 
  399. kGenericMusicCallNumber            EQU        $80                    ; call MusicDerivedSetPartInstrumentNumber for MusicSetPartInstrumentNumber calls, & don't send any C0 or bank stuff 
  400. kGenericMusicCallROMInstrument    EQU        $0100                ; call MusicSetInstrument for MusicSetPartInstrumentNumber for "ROM" instruments, passing params from the ROMi resource 
  401. kGenericMusicAllDefaults        EQU        $0200                ; indicates that when a new instrument is recalled, all knobs are reset to DEFAULT settings. True for GS modules 
  402. OfflineSampleType        RECORD 0
  403. numChannels                 ds.l    1                ; offset: $0 (0)        ; number of channels,  ie mono = 1
  404. sampleRate                 ds.l    1                ; offset: $4 (4)        ; sample rate in Apples Fixed point representation
  405. sampleSize                 ds.w    1                ; offset: $8 (8)        ; number of bits in sample
  406. sizeof                     EQU *                    ; size:   $A (10)
  407.                         ENDR
  408. InstrumentInfoRecord    RECORD 0
  409. instrumentNumber         ds.l    1                ; offset: $0 (0)        ;  instrument number (if 0, name is a catagory)
  410. flags                     ds.l    1                ; offset: $4 (4)        ;  show in picker, etc.
  411. toneNameIndex             ds.l    1                ; offset: $8 (8)        ;  index in toneNames (1 based)
  412. itxtNameAtomID             ds.l    1                ; offset: $C (12)        ;  index in itxtNames (itxt/name by index)
  413. sizeof                     EQU *                    ; size:   $10 (16)
  414.                         ENDR
  415. InstrumentInfoList        RECORD 0
  416. recordCount                 ds.l    1                ; offset: $0 (0)
  417. toneNames                 ds.l    1                ; offset: $4 (4)        ;  name from tone description
  418. itxtNames                 ds.l    1                ; offset: $8 (8)        ;  itxt/name atoms for instruments
  419. info                     ds        InstrumentInfoRecord ; offset: $C (12) <-- really an array of length one
  420. sizeof                     EQU *                    ; size:   $1C (28)
  421.                         ENDR
  422. ; typedef struct InstrumentInfoList *    InstrumentInfoListPtr
  423.  
  424. ; typedef InstrumentInfoListPtr *        InstrumentInfoListHandle
  425.  
  426. ;
  427. ; pascal ComponentResult MusicGetDescription(MusicComponent mc, SynthesizerDescription *sd)
  428. ;
  429.     IF ¬ GENERATINGCFM THEN
  430.         Macro
  431.         _MusicGetDescription
  432.             dc.w                $2F3C
  433.             dc.w                $0004
  434.             dc.w                $0001
  435.             moveq               #0,d0
  436.             dc.w                $A82A
  437.         EndM
  438.     ELSE
  439.         IMPORT_CFM_FUNCTION MusicGetDescription
  440.     ENDIF
  441.  
  442. ;
  443. ; pascal ComponentResult MusicGetPart(MusicComponent mc, long part, long *midiChannel, long *polyphony)
  444. ;
  445.     IF ¬ GENERATINGCFM THEN
  446.         Macro
  447.         _MusicGetPart
  448.             dc.w                $2F3C
  449.             dc.w                $000C
  450.             dc.w                $0002
  451.             moveq               #0,d0
  452.             dc.w                $A82A
  453.         EndM
  454.     ELSE
  455.         IMPORT_CFM_FUNCTION MusicGetPart
  456.     ENDIF
  457.  
  458. ;
  459. ; pascal ComponentResult MusicSetPart(MusicComponent mc, long part, long midiChannel, long polyphony)
  460. ;
  461.     IF ¬ GENERATINGCFM THEN
  462.         Macro
  463.         _MusicSetPart
  464.             dc.w                $2F3C
  465.             dc.w                $000C
  466.             dc.w                $0003
  467.             moveq               #0,d0
  468.             dc.w                $A82A
  469.         EndM
  470.     ELSE
  471.         IMPORT_CFM_FUNCTION MusicSetPart
  472.     ENDIF
  473.  
  474. ;
  475. ; pascal ComponentResult MusicSetPartInstrumentNumber(MusicComponent mc, long part, long instrumentNumber)
  476. ;
  477.     IF ¬ GENERATINGCFM THEN
  478.         Macro
  479.         _MusicSetPartInstrumentNumber
  480.             dc.w                $2F3C
  481.             dc.w                $0008
  482.             dc.w                $0004
  483.             moveq               #0,d0
  484.             dc.w                $A82A
  485.         EndM
  486.     ELSE
  487.         IMPORT_CFM_FUNCTION MusicSetPartInstrumentNumber
  488.     ENDIF
  489.  
  490. ;
  491. ; pascal ComponentResult MusicGetPartInstrumentNumber(MusicComponent mc, long part)
  492. ;
  493.     IF ¬ GENERATINGCFM THEN
  494.         Macro
  495.         _MusicGetPartInstrumentNumber
  496.             dc.w                $2F3C
  497.             dc.w                $0004
  498.             dc.w                $0005
  499.             moveq               #0,d0
  500.             dc.w                $A82A
  501.         EndM
  502.     ELSE
  503.         IMPORT_CFM_FUNCTION MusicGetPartInstrumentNumber
  504.     ENDIF
  505.  
  506. ;
  507. ; pascal ComponentResult MusicStorePartInstrument(MusicComponent mc, long part, long instrumentNumber)
  508. ;
  509.     IF ¬ GENERATINGCFM THEN
  510.         Macro
  511.         _MusicStorePartInstrument
  512.             dc.w                $2F3C
  513.             dc.w                $0008
  514.             dc.w                $0006
  515.             moveq               #0,d0
  516.             dc.w                $A82A
  517.         EndM
  518.     ELSE
  519.         IMPORT_CFM_FUNCTION MusicStorePartInstrument
  520.     ENDIF
  521.  
  522. ;
  523. ; pascal ComponentResult MusicGetPartAtomicInstrument(MusicComponent mc, long part, AtomicInstrument *ai, long flags)
  524. ;
  525.     IF ¬ GENERATINGCFM THEN
  526.         Macro
  527.         _MusicGetPartAtomicInstrument
  528.             dc.w                $2F3C
  529.             dc.w                $000C
  530.             dc.w                $0009
  531.             moveq               #0,d0
  532.             dc.w                $A82A
  533.         EndM
  534.     ELSE
  535.         IMPORT_CFM_FUNCTION MusicGetPartAtomicInstrument
  536.     ENDIF
  537.  
  538. ;
  539. ; pascal ComponentResult MusicSetPartAtomicInstrument(MusicComponent mc, long part, AtomicInstrumentPtr aiP, long flags)
  540. ;
  541.     IF ¬ GENERATINGCFM THEN
  542.         Macro
  543.         _MusicSetPartAtomicInstrument
  544.             dc.w                $2F3C
  545.             dc.w                $000C
  546.             dc.w                $000A
  547.             moveq               #0,d0
  548.             dc.w                $A82A
  549.         EndM
  550.     ELSE
  551.         IMPORT_CFM_FUNCTION MusicSetPartAtomicInstrument
  552.     ENDIF
  553.  
  554. ;  Obsolete calls
  555. ;
  556. ; pascal ComponentResult MusicGetInstrumentKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  557. ;
  558.     IF ¬ GENERATINGCFM THEN
  559.         Macro
  560.         _MusicGetInstrumentKnobDescriptionObsolete
  561.             dc.w                $2F3C
  562.             dc.w                $0008
  563.             dc.w                $000D
  564.             moveq               #0,d0
  565.             dc.w                $A82A
  566.         EndM
  567.     ELSE
  568.         IMPORT_CFM_FUNCTION MusicGetInstrumentKnobDescriptionObsolete
  569.     ENDIF
  570.  
  571. ;
  572. ; pascal ComponentResult MusicGetDrumKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  573. ;
  574.     IF ¬ GENERATINGCFM THEN
  575.         Macro
  576.         _MusicGetDrumKnobDescriptionObsolete
  577.             dc.w                $2F3C
  578.             dc.w                $0008
  579.             dc.w                $000E
  580.             moveq               #0,d0
  581.             dc.w                $A82A
  582.         EndM
  583.     ELSE
  584.         IMPORT_CFM_FUNCTION MusicGetDrumKnobDescriptionObsolete
  585.     ENDIF
  586.  
  587. ;
  588. ; pascal ComponentResult MusicGetKnobDescriptionObsolete(MusicComponent mc, long knobIndex, void *mkd)
  589. ;
  590.     IF ¬ GENERATINGCFM THEN
  591.         Macro
  592.         _MusicGetKnobDescriptionObsolete
  593.             dc.w                $2F3C
  594.             dc.w                $0008
  595.             dc.w                $000F
  596.             moveq               #0,d0
  597.             dc.w                $A82A
  598.         EndM
  599.     ELSE
  600.         IMPORT_CFM_FUNCTION MusicGetKnobDescriptionObsolete
  601.     ENDIF
  602.  
  603. ;
  604. ; pascal ComponentResult MusicGetPartKnob(MusicComponent mc, long part, long knobID)
  605. ;
  606.     IF ¬ GENERATINGCFM THEN
  607.         Macro
  608.         _MusicGetPartKnob
  609.             dc.w                $2F3C
  610.             dc.w                $0008
  611.             dc.w                $0010
  612.             moveq               #0,d0
  613.             dc.w                $A82A
  614.         EndM
  615.     ELSE
  616.         IMPORT_CFM_FUNCTION MusicGetPartKnob
  617.     ENDIF
  618.  
  619. ;
  620. ; pascal ComponentResult MusicSetPartKnob(MusicComponent mc, long part, long knobID, long knobValue)
  621. ;
  622.     IF ¬ GENERATINGCFM THEN
  623.         Macro
  624.         _MusicSetPartKnob
  625.             dc.w                $2F3C
  626.             dc.w                $000C
  627.             dc.w                $0011
  628.             moveq               #0,d0
  629.             dc.w                $A82A
  630.         EndM
  631.     ELSE
  632.         IMPORT_CFM_FUNCTION MusicSetPartKnob
  633.     ENDIF
  634.  
  635. ;
  636. ; pascal ComponentResult MusicGetKnob(MusicComponent mc, long knobID)
  637. ;
  638.     IF ¬ GENERATINGCFM THEN
  639.         Macro
  640.         _MusicGetKnob
  641.             dc.w                $2F3C
  642.             dc.w                $0004
  643.             dc.w                $0012
  644.             moveq               #0,d0
  645.             dc.w                $A82A
  646.         EndM
  647.     ELSE
  648.         IMPORT_CFM_FUNCTION MusicGetKnob
  649.     ENDIF
  650.  
  651. ;
  652. ; pascal ComponentResult MusicSetKnob(MusicComponent mc, long knobID, long knobValue)
  653. ;
  654.     IF ¬ GENERATINGCFM THEN
  655.         Macro
  656.         _MusicSetKnob
  657.             dc.w                $2F3C
  658.             dc.w                $0008
  659.             dc.w                $0013
  660.             moveq               #0,d0
  661.             dc.w                $A82A
  662.         EndM
  663.     ELSE
  664.         IMPORT_CFM_FUNCTION MusicSetKnob
  665.     ENDIF
  666.  
  667. ;
  668. ; pascal ComponentResult MusicGetPartName(MusicComponent mc, long part, StringPtr name)
  669. ;
  670.     IF ¬ GENERATINGCFM THEN
  671.         Macro
  672.         _MusicGetPartName
  673.             dc.w                $2F3C
  674.             dc.w                $0008
  675.             dc.w                $0014
  676.             moveq               #0,d0
  677.             dc.w                $A82A
  678.         EndM
  679.     ELSE
  680.         IMPORT_CFM_FUNCTION MusicGetPartName
  681.     ENDIF
  682.  
  683. ;
  684. ; pascal ComponentResult MusicSetPartName(MusicComponent mc, long part, StringPtr name)
  685. ;
  686.     IF ¬ GENERATINGCFM THEN
  687.         Macro
  688.         _MusicSetPartName
  689.             dc.w                $2F3C
  690.             dc.w                $0008
  691.             dc.w                $0015
  692.             moveq               #0,d0
  693.             dc.w                $A82A
  694.         EndM
  695.     ELSE
  696.         IMPORT_CFM_FUNCTION MusicSetPartName
  697.     ENDIF
  698.  
  699. ;
  700. ; pascal ComponentResult MusicFindTone(MusicComponent mc, ToneDescription *td, long *instrumentNumber, unsigned long *fit)
  701. ;
  702.     IF ¬ GENERATINGCFM THEN
  703.         Macro
  704.         _MusicFindTone
  705.             dc.w                $2F3C
  706.             dc.w                $000C
  707.             dc.w                $0016
  708.             moveq               #0,d0
  709.             dc.w                $A82A
  710.         EndM
  711.     ELSE
  712.         IMPORT_CFM_FUNCTION MusicFindTone
  713.     ENDIF
  714.  
  715. ;
  716. ; pascal ComponentResult MusicPlayNote(MusicComponent mc, long part, long pitch, long velocity)
  717. ;
  718.     IF ¬ GENERATINGCFM THEN
  719.         Macro
  720.         _MusicPlayNote
  721.             dc.w                $2F3C
  722.             dc.w                $000C
  723.             dc.w                $0017
  724.             moveq               #0,d0
  725.             dc.w                $A82A
  726.         EndM
  727.     ELSE
  728.         IMPORT_CFM_FUNCTION MusicPlayNote
  729.     ENDIF
  730.  
  731. ;
  732. ; pascal ComponentResult MusicResetPart(MusicComponent mc, long part)
  733. ;
  734.     IF ¬ GENERATINGCFM THEN
  735.         Macro
  736.         _MusicResetPart
  737.             dc.w                $2F3C
  738.             dc.w                $0004
  739.             dc.w                $0018
  740.             moveq               #0,d0
  741.             dc.w                $A82A
  742.         EndM
  743.     ELSE
  744.         IMPORT_CFM_FUNCTION MusicResetPart
  745.     ENDIF
  746.  
  747. ;
  748. ; pascal ComponentResult MusicSetPartController(MusicComponent mc, long part, MusicController controllerNumber, long controllerValue)
  749. ;
  750.     IF ¬ GENERATINGCFM THEN
  751.         Macro
  752.         _MusicSetPartController
  753.             dc.w                $2F3C
  754.             dc.w                $000C
  755.             dc.w                $0019
  756.             moveq               #0,d0
  757.             dc.w                $A82A
  758.         EndM
  759.     ELSE
  760.         IMPORT_CFM_FUNCTION MusicSetPartController
  761.     ENDIF
  762.  
  763. ;
  764. ; pascal ComponentResult MusicGetPartController(MusicComponent mc, long part, MusicController controllerNumber)
  765. ;
  766.     IF ¬ GENERATINGCFM THEN
  767.         Macro
  768.         _MusicGetPartController
  769.             dc.w                $2F3C
  770.             dc.w                $0008
  771.             dc.w                $001A
  772.             moveq               #0,d0
  773.             dc.w                $A82A
  774.         EndM
  775.     ELSE
  776.         IMPORT_CFM_FUNCTION MusicGetPartController
  777.     ENDIF
  778.  
  779. ;
  780. ; pascal ComponentResult MusicGetMIDIProc(MusicComponent mc, MusicMIDISendUPP *midiSendProc, long *refCon)
  781. ;
  782.     IF ¬ GENERATINGCFM THEN
  783.         Macro
  784.         _MusicGetMIDIProc
  785.             dc.w                $2F3C
  786.             dc.w                $0008
  787.             dc.w                $001B
  788.             moveq               #0,d0
  789.             dc.w                $A82A
  790.         EndM
  791.     ELSE
  792.         IMPORT_CFM_FUNCTION MusicGetMIDIProc
  793.     ENDIF
  794.  
  795. ;
  796. ; pascal ComponentResult MusicSetMIDIProc(MusicComponent mc, MusicMIDISendUPP midiSendProc, long refCon)
  797. ;
  798.     IF ¬ GENERATINGCFM THEN
  799.         Macro
  800.         _MusicSetMIDIProc
  801.             dc.w                $2F3C
  802.             dc.w                $0008
  803.             dc.w                $001C
  804.             moveq               #0,d0
  805.             dc.w                $A82A
  806.         EndM
  807.     ELSE
  808.         IMPORT_CFM_FUNCTION MusicSetMIDIProc
  809.     ENDIF
  810.  
  811. ;
  812. ; pascal ComponentResult MusicGetInstrumentNames(MusicComponent mc, long modifiableInstruments, Handle *instrumentNames, Handle *instrumentCategoryLasts, Handle *instrumentCategoryNames)
  813. ;
  814.     IF ¬ GENERATINGCFM THEN
  815.         Macro
  816.         _MusicGetInstrumentNames
  817.             dc.w                $2F3C
  818.             dc.w                $0010
  819.             dc.w                $001D
  820.             moveq               #0,d0
  821.             dc.w                $A82A
  822.         EndM
  823.     ELSE
  824.         IMPORT_CFM_FUNCTION MusicGetInstrumentNames
  825.     ENDIF
  826.  
  827. ;
  828. ; pascal ComponentResult MusicGetDrumNames(MusicComponent mc, long modifiableInstruments, Handle *instrumentNumbers, Handle *instrumentNames)
  829. ;
  830.     IF ¬ GENERATINGCFM THEN
  831.         Macro
  832.         _MusicGetDrumNames
  833.             dc.w                $2F3C
  834.             dc.w                $000C
  835.             dc.w                $001E
  836.             moveq               #0,d0
  837.             dc.w                $A82A
  838.         EndM
  839.     ELSE
  840.         IMPORT_CFM_FUNCTION MusicGetDrumNames
  841.     ENDIF
  842.  
  843. ;
  844. ; pascal ComponentResult MusicGetMasterTune(MusicComponent mc)
  845. ;
  846.     IF ¬ GENERATINGCFM THEN
  847.         Macro
  848.         _MusicGetMasterTune
  849.             dc.w                $2F3C
  850.             dc.w                $0000
  851.             dc.w                $001F
  852.             moveq               #0,d0
  853.             dc.w                $A82A
  854.         EndM
  855.     ELSE
  856.         IMPORT_CFM_FUNCTION MusicGetMasterTune
  857.     ENDIF
  858.  
  859. ;
  860. ; pascal ComponentResult MusicSetMasterTune(MusicComponent mc, long masterTune)
  861. ;
  862.     IF ¬ GENERATINGCFM THEN
  863.         Macro
  864.         _MusicSetMasterTune
  865.             dc.w                $2F3C
  866.             dc.w                $0004
  867.             dc.w                $0020
  868.             moveq               #0,d0
  869.             dc.w                $A82A
  870.         EndM
  871.     ELSE
  872.         IMPORT_CFM_FUNCTION MusicSetMasterTune
  873.     ENDIF
  874.  
  875. ;
  876. ; pascal ComponentResult MusicGetInstrumentAboutInfo(MusicComponent mc, long part, InstrumentAboutInfo *iai)
  877. ;
  878.     IF ¬ GENERATINGCFM THEN
  879.         Macro
  880.         _MusicGetInstrumentAboutInfo
  881.             dc.w                $2F3C
  882.             dc.w                $0008
  883.             dc.w                $0022
  884.             moveq               #0,d0
  885.             dc.w                $A82A
  886.         EndM
  887.     ELSE
  888.         IMPORT_CFM_FUNCTION MusicGetInstrumentAboutInfo
  889.     ENDIF
  890.  
  891. ;
  892. ; pascal ComponentResult MusicGetDeviceConnection(MusicComponent mc, long index, long *id1, long *id2)
  893. ;
  894.     IF ¬ GENERATINGCFM THEN
  895.         Macro
  896.         _MusicGetDeviceConnection
  897.             dc.w                $2F3C
  898.             dc.w                $000C
  899.             dc.w                $0023
  900.             moveq               #0,d0
  901.             dc.w                $A82A
  902.         EndM
  903.     ELSE
  904.         IMPORT_CFM_FUNCTION MusicGetDeviceConnection
  905.     ENDIF
  906.  
  907. ;
  908. ; pascal ComponentResult MusicUseDeviceConnection(MusicComponent mc, long id1, long id2)
  909. ;
  910.     IF ¬ GENERATINGCFM THEN
  911.         Macro
  912.         _MusicUseDeviceConnection
  913.             dc.w                $2F3C
  914.             dc.w                $0008
  915.             dc.w                $0024
  916.             moveq               #0,d0
  917.             dc.w                $A82A
  918.         EndM
  919.     ELSE
  920.         IMPORT_CFM_FUNCTION MusicUseDeviceConnection
  921.     ENDIF
  922.  
  923. ;
  924. ; pascal ComponentResult MusicGetKnobSettingStrings(MusicComponent mc, long knobIndex, long isGlobal, Handle *settingsNames, Handle *settingsCategoryLasts, Handle *settingsCategoryNames)
  925. ;
  926.     IF ¬ GENERATINGCFM THEN
  927.         Macro
  928.         _MusicGetKnobSettingStrings
  929.             dc.w                $2F3C
  930.             dc.w                $0014
  931.             dc.w                $0025
  932.             moveq               #0,d0
  933.             dc.w                $A82A
  934.         EndM
  935.     ELSE
  936.         IMPORT_CFM_FUNCTION MusicGetKnobSettingStrings
  937.     ENDIF
  938.  
  939. ;
  940. ; pascal ComponentResult MusicGetMIDIPorts(MusicComponent mc, long *inputPortCount, long *outputPortCount)
  941. ;
  942.     IF ¬ GENERATINGCFM THEN
  943.         Macro
  944.         _MusicGetMIDIPorts
  945.             dc.w                $2F3C
  946.             dc.w                $0008
  947.             dc.w                $0026
  948.             moveq               #0,d0
  949.             dc.w                $A82A
  950.         EndM
  951.     ELSE
  952.         IMPORT_CFM_FUNCTION MusicGetMIDIPorts
  953.     ENDIF
  954.  
  955. ;
  956. ; pascal ComponentResult MusicSendMIDI(MusicComponent mc, long portIndex, MusicMIDIPacket *mp)
  957. ;
  958.     IF ¬ GENERATINGCFM THEN
  959.         Macro
  960.         _MusicSendMIDI
  961.             dc.w                $2F3C
  962.             dc.w                $0008
  963.             dc.w                $0027
  964.             moveq               #0,d0
  965.             dc.w                $A82A
  966.         EndM
  967.     ELSE
  968.         IMPORT_CFM_FUNCTION MusicSendMIDI
  969.     ENDIF
  970.  
  971. ;
  972. ; pascal ComponentResult MusicReceiveMIDI(MusicComponent mc, MusicMIDIReadHookUPP readHook, long refCon)
  973. ;
  974.     IF ¬ GENERATINGCFM THEN
  975.         Macro
  976.         _MusicReceiveMIDI
  977.             dc.w                $2F3C
  978.             dc.w                $0008
  979.             dc.w                $0028
  980.             moveq               #0,d0
  981.             dc.w                $A82A
  982.         EndM
  983.     ELSE
  984.         IMPORT_CFM_FUNCTION MusicReceiveMIDI
  985.     ENDIF
  986.  
  987. ;
  988. ; pascal ComponentResult MusicStartOffline(MusicComponent mc, unsigned long *numChannels, UnsignedFixed *sampleRate, unsigned short *sampleSize, MusicOfflineDataUPP dataProc, long dataProcRefCon)
  989. ;
  990.     IF ¬ GENERATINGCFM THEN
  991.         Macro
  992.         _MusicStartOffline
  993.             dc.w                $2F3C
  994.             dc.w                $0014
  995.             dc.w                $0029
  996.             moveq               #0,d0
  997.             dc.w                $A82A
  998.         EndM
  999.     ELSE
  1000.         IMPORT_CFM_FUNCTION MusicStartOffline
  1001.     ENDIF
  1002.  
  1003. ;
  1004. ; pascal ComponentResult MusicSetOfflineTimeTo(MusicComponent mc, long newTimeStamp)
  1005. ;
  1006.     IF ¬ GENERATINGCFM THEN
  1007.         Macro
  1008.         _MusicSetOfflineTimeTo
  1009.             dc.w                $2F3C
  1010.             dc.w                $0004
  1011.             dc.w                $002A
  1012.             moveq               #0,d0
  1013.             dc.w                $A82A
  1014.         EndM
  1015.     ELSE
  1016.         IMPORT_CFM_FUNCTION MusicSetOfflineTimeTo
  1017.     ENDIF
  1018.  
  1019. ;
  1020. ; pascal ComponentResult MusicGetInstrumentKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  1021. ;
  1022.     IF ¬ GENERATINGCFM THEN
  1023.         Macro
  1024.         _MusicGetInstrumentKnobDescription
  1025.             dc.w                $2F3C
  1026.             dc.w                $0008
  1027.             dc.w                $002B
  1028.             moveq               #0,d0
  1029.             dc.w                $A82A
  1030.         EndM
  1031.     ELSE
  1032.         IMPORT_CFM_FUNCTION MusicGetInstrumentKnobDescription
  1033.     ENDIF
  1034.  
  1035. ;
  1036. ; pascal ComponentResult MusicGetDrumKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  1037. ;
  1038.     IF ¬ GENERATINGCFM THEN
  1039.         Macro
  1040.         _MusicGetDrumKnobDescription
  1041.             dc.w                $2F3C
  1042.             dc.w                $0008
  1043.             dc.w                $002C
  1044.             moveq               #0,d0
  1045.             dc.w                $A82A
  1046.         EndM
  1047.     ELSE
  1048.         IMPORT_CFM_FUNCTION MusicGetDrumKnobDescription
  1049.     ENDIF
  1050.  
  1051. ;
  1052. ; pascal ComponentResult MusicGetKnobDescription(MusicComponent mc, long knobIndex, KnobDescription *mkd)
  1053. ;
  1054.     IF ¬ GENERATINGCFM THEN
  1055.         Macro
  1056.         _MusicGetKnobDescription
  1057.             dc.w                $2F3C
  1058.             dc.w                $0008
  1059.             dc.w                $002D
  1060.             moveq               #0,d0
  1061.             dc.w                $A82A
  1062.         EndM
  1063.     ELSE
  1064.         IMPORT_CFM_FUNCTION MusicGetKnobDescription
  1065.     ENDIF
  1066.  
  1067. ;
  1068. ; pascal ComponentResult MusicGetInfoText(MusicComponent mc, long selector, Handle *textH, Handle *styleH)
  1069. ;
  1070.     IF ¬ GENERATINGCFM THEN
  1071.         Macro
  1072.         _MusicGetInfoText
  1073.             dc.w                $2F3C
  1074.             dc.w                $000C
  1075.             dc.w                $002E
  1076.             moveq               #0,d0
  1077.             dc.w                $A82A
  1078.         EndM
  1079.     ELSE
  1080.         IMPORT_CFM_FUNCTION MusicGetInfoText
  1081.     ENDIF
  1082.  
  1083.  
  1084. kGetInstrumentInfoNoBuiltIn        EQU        $01
  1085. kGetInstrumentInfoMidiUserInst    EQU        $02
  1086. kGetInstrumentInfoNoIText        EQU        $04
  1087. ;
  1088. ; pascal ComponentResult MusicGetInstrumentInfo(MusicComponent mc, long getInstrumentInfoFlags, InstrumentInfoListHandle *infoListH)
  1089. ;
  1090.     IF ¬ GENERATINGCFM THEN
  1091.         Macro
  1092.         _MusicGetInstrumentInfo
  1093.             dc.w                $2F3C
  1094.             dc.w                $0008
  1095.             dc.w                $002F
  1096.             moveq               #0,d0
  1097.             dc.w                $A82A
  1098.         EndM
  1099.     ELSE
  1100.         IMPORT_CFM_FUNCTION MusicGetInstrumentInfo
  1101.     ENDIF
  1102.  
  1103. ;
  1104. ; pascal ComponentResult MusicTask(MusicComponent mc)
  1105. ;
  1106.     IF ¬ GENERATINGCFM THEN
  1107.         Macro
  1108.         _MusicTask
  1109.             dc.w                $2F3C
  1110.             dc.w                $0000
  1111.             dc.w                $0031
  1112.             moveq               #0,d0
  1113.             dc.w                $A82A
  1114.         EndM
  1115.     ELSE
  1116.         IMPORT_CFM_FUNCTION MusicTask
  1117.     ENDIF
  1118.  
  1119. ;
  1120. ; pascal ComponentResult MusicSetPartInstrumentNumberInterruptSafe(MusicComponent mc, long part, long instrumentNumber)
  1121. ;
  1122.     IF ¬ GENERATINGCFM THEN
  1123.         Macro
  1124.         _MusicSetPartInstrumentNumberInterruptSafe
  1125.             dc.w                $2F3C
  1126.             dc.w                $0008
  1127.             dc.w                $0032
  1128.             moveq               #0,d0
  1129.             dc.w                $A82A
  1130.         EndM
  1131.     ELSE
  1132.         IMPORT_CFM_FUNCTION MusicSetPartInstrumentNumberInterruptSafe
  1133.     ENDIF
  1134.  
  1135. ;
  1136. ; pascal ComponentResult MusicSetPartSoundLocalization(MusicComponent mc, long part, Handle data)
  1137. ;
  1138.     IF ¬ GENERATINGCFM THEN
  1139.         Macro
  1140.         _MusicSetPartSoundLocalization
  1141.             dc.w                $2F3C
  1142.             dc.w                $0008
  1143.             dc.w                $0033
  1144.             moveq               #0,d0
  1145.             dc.w                $A82A
  1146.         EndM
  1147.     ELSE
  1148.         IMPORT_CFM_FUNCTION MusicSetPartSoundLocalization
  1149.     ENDIF
  1150.  
  1151. ;
  1152. ; pascal ComponentResult MusicGenericConfigure(MusicComponent mc, long mode, long flags, long baseResID)
  1153. ;
  1154.     IF ¬ GENERATINGCFM THEN
  1155.         Macro
  1156.         _MusicGenericConfigure
  1157.             dc.w                $2F3C
  1158.             dc.w                $000C
  1159.             dc.w                $0100
  1160.             moveq               #0,d0
  1161.             dc.w                $A82A
  1162.         EndM
  1163.     ELSE
  1164.         IMPORT_CFM_FUNCTION MusicGenericConfigure
  1165.     ENDIF
  1166.  
  1167. ;
  1168. ; pascal ComponentResult MusicGenericGetPart(MusicComponent mc, long partNumber, GCPart **part)
  1169. ;
  1170.     IF ¬ GENERATINGCFM THEN
  1171.         Macro
  1172.         _MusicGenericGetPart
  1173.             dc.w                $2F3C
  1174.             dc.w                $0008
  1175.             dc.w                $0101
  1176.             moveq               #0,d0
  1177.             dc.w                $A82A
  1178.         EndM
  1179.     ELSE
  1180.         IMPORT_CFM_FUNCTION MusicGenericGetPart
  1181.     ENDIF
  1182.  
  1183. ;
  1184. ; pascal ComponentResult MusicGenericGetKnobList(MusicComponent mc, long knobType, GenericKnobDescriptionListHandle *gkdlH)
  1185. ;
  1186.     IF ¬ GENERATINGCFM THEN
  1187.         Macro
  1188.         _MusicGenericGetKnobList
  1189.             dc.w                $2F3C
  1190.             dc.w                $0008
  1191.             dc.w                $0102
  1192.             moveq               #0,d0
  1193.             dc.w                $A82A
  1194.         EndM
  1195.     ELSE
  1196.         IMPORT_CFM_FUNCTION MusicGenericGetKnobList
  1197.     ENDIF
  1198.  
  1199. ;
  1200. ; pascal ComponentResult MusicDerivedMIDISend(MusicComponent mc, MusicMIDIPacket *packet)
  1201. ;
  1202.     IF ¬ GENERATINGCFM THEN
  1203.         Macro
  1204.         _MusicDerivedMIDISend
  1205.             dc.w                $2F3C
  1206.             dc.w                $0004
  1207.             dc.w                $0200
  1208.             moveq               #0,d0
  1209.             dc.w                $A82A
  1210.         EndM
  1211.     ELSE
  1212.         IMPORT_CFM_FUNCTION MusicDerivedMIDISend
  1213.     ENDIF
  1214.  
  1215. ;
  1216. ; pascal ComponentResult MusicDerivedSetKnob(MusicComponent mc, long knobType, long knobNumber, long knobValue, long partNumber, GCPart *p, GenericKnobDescription *gkd)
  1217. ;
  1218.     IF ¬ GENERATINGCFM THEN
  1219.         Macro
  1220.         _MusicDerivedSetKnob
  1221.             dc.w                $2F3C
  1222.             dc.w                $0018
  1223.             dc.w                $0201
  1224.             moveq               #0,d0
  1225.             dc.w                $A82A
  1226.         EndM
  1227.     ELSE
  1228.         IMPORT_CFM_FUNCTION MusicDerivedSetKnob
  1229.     ENDIF
  1230.  
  1231. ;
  1232. ; pascal ComponentResult MusicDerivedSetPart(MusicComponent mc, long partNumber, GCPart *p)
  1233. ;
  1234.     IF ¬ GENERATINGCFM THEN
  1235.         Macro
  1236.         _MusicDerivedSetPart
  1237.             dc.w                $2F3C
  1238.             dc.w                $0008
  1239.             dc.w                $0202
  1240.             moveq               #0,d0
  1241.             dc.w                $A82A
  1242.         EndM
  1243.     ELSE
  1244.         IMPORT_CFM_FUNCTION MusicDerivedSetPart
  1245.     ENDIF
  1246.  
  1247. ;
  1248. ; pascal ComponentResult MusicDerivedSetInstrument(MusicComponent mc, long partNumber, GCPart *p)
  1249. ;
  1250.     IF ¬ GENERATINGCFM THEN
  1251.         Macro
  1252.         _MusicDerivedSetInstrument
  1253.             dc.w                $2F3C
  1254.             dc.w                $0008
  1255.             dc.w                $0203
  1256.             moveq               #0,d0
  1257.             dc.w                $A82A
  1258.         EndM
  1259.     ELSE
  1260.         IMPORT_CFM_FUNCTION MusicDerivedSetInstrument
  1261.     ENDIF
  1262.  
  1263. ;
  1264. ; pascal ComponentResult MusicDerivedSetPartInstrumentNumber(MusicComponent mc, long partNumber, GCPart *p)
  1265. ;
  1266.     IF ¬ GENERATINGCFM THEN
  1267.         Macro
  1268.         _MusicDerivedSetPartInstrumentNumber
  1269.             dc.w                $2F3C
  1270.             dc.w                $0008
  1271.             dc.w                $0204
  1272.             moveq               #0,d0
  1273.             dc.w                $A82A
  1274.         EndM
  1275.     ELSE
  1276.         IMPORT_CFM_FUNCTION MusicDerivedSetPartInstrumentNumber
  1277.     ENDIF
  1278.  
  1279. ;
  1280. ; pascal ComponentResult MusicDerivedSetMIDI(MusicComponent mc, MusicMIDISendProcPtr midiProc, long refcon, long midiChannel)
  1281. ;
  1282.     IF ¬ GENERATINGCFM THEN
  1283.         Macro
  1284.         _MusicDerivedSetMIDI
  1285.             dc.w                $2F3C
  1286.             dc.w                $000C
  1287.             dc.w                $0205
  1288.             moveq               #0,d0
  1289.             dc.w                $A82A
  1290.         EndM
  1291.     ELSE
  1292.         IMPORT_CFM_FUNCTION MusicDerivedSetMIDI
  1293.     ENDIF
  1294.  
  1295. ;
  1296. ; pascal ComponentResult MusicDerivedStorePartInstrument(MusicComponent mc, long partNumber, GCPart *p, long instrumentNumber)
  1297. ;
  1298.     IF ¬ GENERATINGCFM THEN
  1299.         Macro
  1300.         _MusicDerivedStorePartInstrument
  1301.             dc.w                $2F3C
  1302.             dc.w                $000C
  1303.             dc.w                $0206
  1304.             moveq               #0,d0
  1305.             dc.w                $A82A
  1306.         EndM
  1307.     ELSE
  1308.         IMPORT_CFM_FUNCTION MusicDerivedStorePartInstrument
  1309.     ENDIF
  1310.  
  1311. ;  Mask bit for returned value by InstrumentFind.
  1312.  
  1313. kInstrumentExactMatch            EQU        $00020000
  1314. kInstrumentRecommendedSubstitute EQU    $00010000
  1315. kInstrumentQualityField            EQU        $FF000000
  1316. kInstrumentRoland8BitQuality    EQU        $05000000
  1317. ; typedef struct InstrumentAboutInfo *    InstrumentAboutInfoPtr
  1318.  
  1319. ; typedef InstrumentAboutInfoPtr *        InstrumentAboutInfoHandle
  1320.  
  1321. GMInstrumentInfo        RECORD 0
  1322. cmpInstID                 ds.l    1                ; offset: $0 (0)
  1323. gmInstNum                 ds.l    1                ; offset: $4 (4)
  1324. instMatch                 ds.l    1                ; offset: $8 (8)
  1325. sizeof                     EQU *                    ; size:   $C (12)
  1326.                         ENDR
  1327. ; typedef struct GMInstrumentInfo *        GMInstrumentInfoPtr
  1328.  
  1329. ; typedef GMInstrumentInfoPtr *            GMInstrumentInfoHandle
  1330.  
  1331. nonGMInstrumentInfoRecord RECORD 0
  1332. cmpInstID                 ds.l    1                ; offset: $0 (0)        ;  if 0, category name
  1333. flags                     ds.l    1                ; offset: $4 (4)        ;  match, show in picker
  1334. toneNameIndex             ds.l    1                ; offset: $8 (8)        ;  index in toneNames (1 based)
  1335. itxtNameAtomID             ds.l    1                ; offset: $C (12)        ;  index in itxtNames (itxt/name by index)
  1336. sizeof                     EQU *                    ; size:   $10 (16)
  1337.                         ENDR
  1338. nonGMInstrumentInfo        RECORD 0
  1339. recordCount                 ds.l    1                ; offset: $0 (0)
  1340. toneNames                 ds.l    1                ; offset: $4 (4)        ;  name from tone description
  1341. itxtNames                 ds.l    1                ; offset: $8 (8)        ;  itext/name atoms for instruments
  1342. instInfo                 ds        nonGMInstrumentInfoRecord ; offset: $C (12) <-- really an array of length one
  1343. sizeof                     EQU *                    ; size:   $1C (28)
  1344.                         ENDR
  1345. ; typedef struct nonGMInstrumentInfo *    nonGMInstrumentInfoPtr
  1346.  
  1347. ; typedef nonGMInstrumentInfoPtr *        nonGMInstrumentInfoHandle
  1348.  
  1349. InstCompInfo            RECORD 0
  1350. infoSize                 ds.l    1                ; offset: $0 (0)        ;  size of this record
  1351. InstrumentLibraryName     ds        Str31            ; offset: $4 (4)
  1352. InstrumentLibraryITxt     ds.l    1                ; offset: $24 (36)        ;  itext/name atoms for instruments
  1353. GMinstrumentCount         ds.l    1                ; offset: $28 (40)
  1354. GMinstrumentInfo         ds.l    1                ; offset: $2C (44)
  1355. GMdrumCount                 ds.l    1                ; offset: $30 (48)
  1356. GMdrumInfo                 ds.l    1                ; offset: $34 (52)
  1357. nonGMinstrumentCount     ds.l    1                ; offset: $38 (56)
  1358. nonGMinstrumentInfo         ds.l    1                ; offset: $3C (60)
  1359. sizeof                     EQU *                    ; size:   $40 (64)
  1360.                         ENDR
  1361. ; typedef struct InstCompInfo *            InstCompInfoPtr
  1362.  
  1363. ; typedef InstCompInfoPtr *                InstCompInfoHandle
  1364.  
  1365. ;
  1366. ; pascal ComponentResult InstrumentGetInst(ComponentInstance ci, long instID, AtomicInstrument *atomicInst, long flags)
  1367. ;
  1368.     IF ¬ GENERATINGCFM THEN
  1369.         Macro
  1370.         _InstrumentGetInst
  1371.             dc.w                $2F3C
  1372.             dc.w                $000C
  1373.             dc.w                $0001
  1374.             moveq               #0,d0
  1375.             dc.w                $A82A
  1376.         EndM
  1377.     ELSE
  1378.         IMPORT_CFM_FUNCTION InstrumentGetInst
  1379.     ENDIF
  1380.  
  1381. ;
  1382. ; pascal ComponentResult InstrumentGetInfo(ComponentInstance ci, long getInstrumentInfoFlags, InstCompInfoHandle *instInfo)
  1383. ;
  1384.     IF ¬ GENERATINGCFM THEN
  1385.         Macro
  1386.         _InstrumentGetInfo
  1387.             dc.w                $2F3C
  1388.             dc.w                $0008
  1389.             dc.w                $0002
  1390.             moveq               #0,d0
  1391.             dc.w                $A82A
  1392.         EndM
  1393.     ELSE
  1394.         IMPORT_CFM_FUNCTION InstrumentGetInfo
  1395.     ENDIF
  1396.  
  1397. ;
  1398. ; pascal ComponentResult InstrumentInitialize(ComponentInstance ci, long initFormat, void *initParams)
  1399. ;
  1400.     IF ¬ GENERATINGCFM THEN
  1401.         Macro
  1402.         _InstrumentInitialize
  1403.             dc.w                $2F3C
  1404.             dc.w                $0008
  1405.             dc.w                $0003
  1406.             moveq               #0,d0
  1407.             dc.w                $A82A
  1408.         EndM
  1409.     ELSE
  1410.         IMPORT_CFM_FUNCTION InstrumentInitialize
  1411.     ENDIF
  1412.  
  1413. ;
  1414. ; pascal ComponentResult InstrumentOpenComponentResFile(ComponentInstance ci, short *resFile)
  1415. ;
  1416.     IF ¬ GENERATINGCFM THEN
  1417.         Macro
  1418.         _InstrumentOpenComponentResFile
  1419.             dc.w                $2F3C
  1420.             dc.w                $0004
  1421.             dc.w                $0004
  1422.             moveq               #0,d0
  1423.             dc.w                $A82A
  1424.         EndM
  1425.     ELSE
  1426.         IMPORT_CFM_FUNCTION InstrumentOpenComponentResFile
  1427.     ENDIF
  1428.  
  1429. ;
  1430. ; pascal ComponentResult InstrumentCloseComponentResFile(ComponentInstance ci, short resFile)
  1431. ;
  1432.     IF ¬ GENERATINGCFM THEN
  1433.         Macro
  1434.         _InstrumentCloseComponentResFile
  1435.             dc.w                $2F3C
  1436.             dc.w                $0002
  1437.             dc.w                $0005
  1438.             moveq               #0,d0
  1439.             dc.w                $A82A
  1440.         EndM
  1441.     ELSE
  1442.         IMPORT_CFM_FUNCTION InstrumentCloseComponentResFile
  1443.     ENDIF
  1444.  
  1445. ;
  1446. ; pascal ComponentResult InstrumentGetComponentRefCon(ComponentInstance ci, void **refCon)
  1447. ;
  1448.     IF ¬ GENERATINGCFM THEN
  1449.         Macro
  1450.         _InstrumentGetComponentRefCon
  1451.             dc.w                $2F3C
  1452.             dc.w                $0004
  1453.             dc.w                $0006
  1454.             moveq               #0,d0
  1455.             dc.w                $A82A
  1456.         EndM
  1457.     ELSE
  1458.         IMPORT_CFM_FUNCTION InstrumentGetComponentRefCon
  1459.     ENDIF
  1460.  
  1461. ;
  1462. ; pascal ComponentResult InstrumentSetComponentRefCon(ComponentInstance ci, void *refCon)
  1463. ;
  1464.     IF ¬ GENERATINGCFM THEN
  1465.         Macro
  1466.         _InstrumentSetComponentRefCon
  1467.             dc.w                $2F3C
  1468.             dc.w                $0004
  1469.             dc.w                $0007
  1470.             moveq               #0,d0
  1471.             dc.w                $A82A
  1472.         EndM
  1473.     ELSE
  1474.         IMPORT_CFM_FUNCTION InstrumentSetComponentRefCon
  1475.     ENDIF
  1476.  
  1477. ;
  1478. ;--------------------------
  1479. ;    Types
  1480. ;--------------------------
  1481. ;
  1482.  
  1483. kSynthesizerConnectionMono        EQU        1                    ; if set, and synth can be mono/poly, then the partCount channels from the system channel are hogged 
  1484. kSynthesizerConnectionMMgr        EQU        2                    ; this connection imported from the MIDI Mgr 
  1485. kSynthesizerConnectionOMS        EQU        4                    ; this connection imported from OMS 
  1486. kSynthesizerConnectionQT        EQU        8                    ; this connection is a QuickTime-only port 
  1487. kSynthesizerConnectionFMS        EQU        16                    ; this connection imported from FMS 
  1488. ;  used for MIDI device only 
  1489. SynthesizerConnections    RECORD 0
  1490. clientID                 ds.l    1                ; offset: $0 (0)
  1491. inputPortID                 ds.l    1                ; offset: $4 (4)        ;  terminology death: this port is used to SEND to the midi synth 
  1492. outputPortID             ds.l    1                ; offset: $8 (8)        ;  terminology death: this port receives from a keyboard or other control device 
  1493. midiChannel                 ds.l    1                ; offset: $C (12)        ;  The system channel; others are configurable (or the nubus slot number) 
  1494. flags                     ds.l    1                ; offset: $10 (16)
  1495. unique                     ds.l    1                ; offset: $14 (20)        ;  unique id may be used instead of index, to getinfo and unregister calls 
  1496. reserved1                 ds.l    1                ; offset: $18 (24)        ;  should be zero 
  1497. reserved2                 ds.l    1                ; offset: $1C (28)        ;  should be zero 
  1498. sizeof                     EQU *                    ; size:   $20 (32)
  1499.                         ENDR
  1500. QTMIDIPort                RECORD 0
  1501. portConnections             ds        SynthesizerConnections ; offset: $0 (0)
  1502. portName                 ds        Str63            ; offset: $20 (32)
  1503. sizeof                     EQU *                    ; size:   $60 (96)
  1504.                         ENDR
  1505.  
  1506. kNoteRequestNoGM                EQU        1                    ; dont degrade to a GM synth 
  1507. kNoteRequestNoSynthType            EQU        2                    ; dont degrade to another synth of same type but different name 
  1508. kNoteRequestSynthMustMatch        EQU        4                    ; synthType must be a match, including kGMSynthComponentSubType 
  1509. ; typedef ComponentInstance             NoteAllocator
  1510.  
  1511. NoteRequestInfo            RECORD 0
  1512. flags                     ds.b    1                ; offset: $0 (0)        ;  1: dont accept GM match, 2: dont accept same-synth-type match 
  1513. reserved                 ds.b    1                ; offset: $1 (1)        ;  must be zero 
  1514. polyphony                 ds.w    1                ; offset: $2 (2)        ;  Maximum number of voices 
  1515. typicalPolyphony         ds.l    1                ; offset: $4 (4)        ;  Hint for level mixing 
  1516. sizeof                     EQU *                    ; size:   $8 (8)
  1517.                         ENDR
  1518. NoteRequest                RECORD 0
  1519. info                     ds        NoteRequestInfo ; offset: $0 (0)
  1520. tone                     ds        ToneDescription ; offset: $8 (8)
  1521. sizeof                     EQU *                    ; size:   $54 (84)
  1522.                         ENDR
  1523.  
  1524.  
  1525.  
  1526. kPickDontMix                    EQU        1                    ; dont mix instruments with drum sounds 
  1527. kPickSameSynth                    EQU        2                    ; only allow the same device that went in, to come out 
  1528. kPickUserInsts                    EQU        4                    ; show user insts in addition to ROM voices 
  1529. kPickEditAllowEdit                EQU        8                    ; lets user switch over to edit mode 
  1530. kPickEditAllowPick                EQU        16                    ; lets the user switch over to pick mode 
  1531. kPickEditSynthGlobal            EQU        32                    ; edit the global knobs of the synth 
  1532. kPickEditControllers            EQU        64                    ; edit the controllers of the notechannel 
  1533.  
  1534. kNoteAllocatorComponentType        EQU        'nota'
  1535. ;
  1536. ;--------------------------------
  1537. ;    Note Allocator Prototypes
  1538. ;--------------------------------
  1539. ;
  1540. ;
  1541. ; pascal ComponentResult NARegisterMusicDevice(NoteAllocator ci, OSType synthType, Str31 name, SynthesizerConnections *connections)
  1542. ;
  1543.     IF ¬ GENERATINGCFM THEN
  1544.         Macro
  1545.         _NARegisterMusicDevice
  1546.             dc.w                $2F3C
  1547.             dc.w                $000C
  1548.             dc.w                $0000
  1549.             moveq               #0,d0
  1550.             dc.w                $A82A
  1551.         EndM
  1552.     ELSE
  1553.         IMPORT_CFM_FUNCTION NARegisterMusicDevice
  1554.     ENDIF
  1555.  
  1556. ;
  1557. ; pascal ComponentResult NAUnregisterMusicDevice(NoteAllocator ci, long index)
  1558. ;
  1559.     IF ¬ GENERATINGCFM THEN
  1560.         Macro
  1561.         _NAUnregisterMusicDevice
  1562.             dc.w                $2F3C
  1563.             dc.w                $0004
  1564.             dc.w                $0001
  1565.             moveq               #0,d0
  1566.             dc.w                $A82A
  1567.         EndM
  1568.     ELSE
  1569.         IMPORT_CFM_FUNCTION NAUnregisterMusicDevice
  1570.     ENDIF
  1571.  
  1572. ;
  1573. ; pascal ComponentResult NAGetRegisteredMusicDevice(NoteAllocator ci, long index, OSType *synthType, Str31 name, SynthesizerConnections *connections, MusicComponent *mc)
  1574. ;
  1575.     IF ¬ GENERATINGCFM THEN
  1576.         Macro
  1577.         _NAGetRegisteredMusicDevice
  1578.             dc.w                $2F3C
  1579.             dc.w                $0014
  1580.             dc.w                $0002
  1581.             moveq               #0,d0
  1582.             dc.w                $A82A
  1583.         EndM
  1584.     ELSE
  1585.         IMPORT_CFM_FUNCTION NAGetRegisteredMusicDevice
  1586.     ENDIF
  1587.  
  1588. ;
  1589. ; pascal ComponentResult NASaveMusicConfiguration(NoteAllocator ci)
  1590. ;
  1591.     IF ¬ GENERATINGCFM THEN
  1592.         Macro
  1593.         _NASaveMusicConfiguration
  1594.             dc.w                $2F3C
  1595.             dc.w                $0000
  1596.             dc.w                $0003
  1597.             moveq               #0,d0
  1598.             dc.w                $A82A
  1599.         EndM
  1600.     ELSE
  1601.         IMPORT_CFM_FUNCTION NASaveMusicConfiguration
  1602.     ENDIF
  1603.  
  1604. ;
  1605. ; pascal ComponentResult NANewNoteChannel(NoteAllocator ci, NoteRequest *noteRequest, NoteChannel *outChannel)
  1606. ;
  1607.     IF ¬ GENERATINGCFM THEN
  1608.         Macro
  1609.         _NANewNoteChannel
  1610.             dc.w                $2F3C
  1611.             dc.w                $0008
  1612.             dc.w                $0004
  1613.             moveq               #0,d0
  1614.             dc.w                $A82A
  1615.         EndM
  1616.     ELSE
  1617.         IMPORT_CFM_FUNCTION NANewNoteChannel
  1618.     ENDIF
  1619.  
  1620. ;
  1621. ; pascal ComponentResult NADisposeNoteChannel(NoteAllocator ci, NoteChannel noteChannel)
  1622. ;
  1623.     IF ¬ GENERATINGCFM THEN
  1624.         Macro
  1625.         _NADisposeNoteChannel
  1626.             dc.w                $2F3C
  1627.             dc.w                $0004
  1628.             dc.w                $0005
  1629.             moveq               #0,d0
  1630.             dc.w                $A82A
  1631.         EndM
  1632.     ELSE
  1633.         IMPORT_CFM_FUNCTION NADisposeNoteChannel
  1634.     ENDIF
  1635.  
  1636. ;
  1637. ; pascal ComponentResult NAGetNoteChannelInfo(NoteAllocator ci, NoteChannel noteChannel, long *index, long *part)
  1638. ;
  1639.     IF ¬ GENERATINGCFM THEN
  1640.         Macro
  1641.         _NAGetNoteChannelInfo
  1642.             dc.w                $2F3C
  1643.             dc.w                $000C
  1644.             dc.w                $0006
  1645.             moveq               #0,d0
  1646.             dc.w                $A82A
  1647.         EndM
  1648.     ELSE
  1649.         IMPORT_CFM_FUNCTION NAGetNoteChannelInfo
  1650.     ENDIF
  1651.  
  1652. ;
  1653. ; pascal ComponentResult NAPrerollNoteChannel(NoteAllocator ci, NoteChannel noteChannel)
  1654. ;
  1655.     IF ¬ GENERATINGCFM THEN
  1656.         Macro
  1657.         _NAPrerollNoteChannel
  1658.             dc.w                $2F3C
  1659.             dc.w                $0004
  1660.             dc.w                $0007
  1661.             moveq               #0,d0
  1662.             dc.w                $A82A
  1663.         EndM
  1664.     ELSE
  1665.         IMPORT_CFM_FUNCTION NAPrerollNoteChannel
  1666.     ENDIF
  1667.  
  1668. ;
  1669. ; pascal ComponentResult NAUnrollNoteChannel(NoteAllocator ci, NoteChannel noteChannel)
  1670. ;
  1671.     IF ¬ GENERATINGCFM THEN
  1672.         Macro
  1673.         _NAUnrollNoteChannel
  1674.             dc.w                $2F3C
  1675.             dc.w                $0004
  1676.             dc.w                $0008
  1677.             moveq               #0,d0
  1678.             dc.w                $A82A
  1679.         EndM
  1680.     ELSE
  1681.         IMPORT_CFM_FUNCTION NAUnrollNoteChannel
  1682.     ENDIF
  1683.  
  1684. ;
  1685. ; pascal ComponentResult NASetNoteChannelVolume(NoteAllocator ci, NoteChannel noteChannel, Fixed volume)
  1686. ;
  1687.     IF ¬ GENERATINGCFM THEN
  1688.         Macro
  1689.         _NASetNoteChannelVolume
  1690.             dc.w                $2F3C
  1691.             dc.w                $0008
  1692.             dc.w                $000B
  1693.             moveq               #0,d0
  1694.             dc.w                $A82A
  1695.         EndM
  1696.     ELSE
  1697.         IMPORT_CFM_FUNCTION NASetNoteChannelVolume
  1698.     ENDIF
  1699.  
  1700. ;
  1701. ; pascal ComponentResult NAResetNoteChannel(NoteAllocator ci, NoteChannel noteChannel)
  1702. ;
  1703.     IF ¬ GENERATINGCFM THEN
  1704.         Macro
  1705.         _NAResetNoteChannel
  1706.             dc.w                $2F3C
  1707.             dc.w                $0004
  1708.             dc.w                $000C
  1709.             moveq               #0,d0
  1710.             dc.w                $A82A
  1711.         EndM
  1712.     ELSE
  1713.         IMPORT_CFM_FUNCTION NAResetNoteChannel
  1714.     ENDIF
  1715.  
  1716. ;
  1717. ; pascal ComponentResult NAPlayNote(NoteAllocator ci, NoteChannel noteChannel, long pitch, long velocity)
  1718. ;
  1719.     IF ¬ GENERATINGCFM THEN
  1720.         Macro
  1721.         _NAPlayNote
  1722.             dc.w                $2F3C
  1723.             dc.w                $000C
  1724.             dc.w                $000D
  1725.             moveq               #0,d0
  1726.             dc.w                $A82A
  1727.         EndM
  1728.     ELSE
  1729.         IMPORT_CFM_FUNCTION NAPlayNote
  1730.     ENDIF
  1731.  
  1732. ;
  1733. ; pascal ComponentResult NASetController(NoteAllocator ci, NoteChannel noteChannel, long controllerNumber, long controllerValue)
  1734. ;
  1735.     IF ¬ GENERATINGCFM THEN
  1736.         Macro
  1737.         _NASetController
  1738.             dc.w                $2F3C
  1739.             dc.w                $000C
  1740.             dc.w                $000E
  1741.             moveq               #0,d0
  1742.             dc.w                $A82A
  1743.         EndM
  1744.     ELSE
  1745.         IMPORT_CFM_FUNCTION NASetController
  1746.     ENDIF
  1747.  
  1748. ;
  1749. ; pascal ComponentResult NASetKnob(NoteAllocator ci, NoteChannel noteChannel, long knobNumber, long knobValue)
  1750. ;
  1751.     IF ¬ GENERATINGCFM THEN
  1752.         Macro
  1753.         _NASetKnob
  1754.             dc.w                $2F3C
  1755.             dc.w                $000C
  1756.             dc.w                $000F
  1757.             moveq               #0,d0
  1758.             dc.w                $A82A
  1759.         EndM
  1760.     ELSE
  1761.         IMPORT_CFM_FUNCTION NASetKnob
  1762.     ENDIF
  1763.  
  1764. ;
  1765. ; pascal ComponentResult NAFindNoteChannelTone(NoteAllocator ci, NoteChannel noteChannel, ToneDescription *td, long *instrumentNumber)
  1766. ;
  1767.     IF ¬ GENERATINGCFM THEN
  1768.         Macro
  1769.         _NAFindNoteChannelTone
  1770.             dc.w                $2F3C
  1771.             dc.w                $000C
  1772.             dc.w                $0010
  1773.             moveq               #0,d0
  1774.             dc.w                $A82A
  1775.         EndM
  1776.     ELSE
  1777.         IMPORT_CFM_FUNCTION NAFindNoteChannelTone
  1778.     ENDIF
  1779.  
  1780. ;
  1781. ; pascal ComponentResult NASetInstrumentNumber(NoteAllocator ci, NoteChannel noteChannel, long instrumentNumber)
  1782. ;
  1783.     IF ¬ GENERATINGCFM THEN
  1784.         Macro
  1785.         _NASetInstrumentNumber
  1786.             dc.w                $2F3C
  1787.             dc.w                $0008
  1788.             dc.w                $0011
  1789.             moveq               #0,d0
  1790.             dc.w                $A82A
  1791.         EndM
  1792.     ELSE
  1793.         IMPORT_CFM_FUNCTION NASetInstrumentNumber
  1794.     ENDIF
  1795.  
  1796. ;
  1797. ; pascal ComponentResult NAPickInstrument(NoteAllocator ci, ModalFilterUPP filterProc, StringPtr prompt, ToneDescription *sd, unsigned long flags, long refCon, long reserved1, long reserved2)
  1798. ;
  1799.     IF ¬ GENERATINGCFM THEN
  1800.         Macro
  1801.         _NAPickInstrument
  1802.             dc.w                $2F3C
  1803.             dc.w                $001C
  1804.             dc.w                $0012
  1805.             moveq               #0,d0
  1806.             dc.w                $A82A
  1807.         EndM
  1808.     ELSE
  1809.         IMPORT_CFM_FUNCTION NAPickInstrument
  1810.     ENDIF
  1811.  
  1812. ;
  1813. ; pascal ComponentResult NAPickArrangement(NoteAllocator ci, ModalFilterUPP filterProc, StringPtr prompt, long zero1, long zero2, Track t, StringPtr songName)
  1814. ;
  1815.     IF ¬ GENERATINGCFM THEN
  1816.         Macro
  1817.         _NAPickArrangement
  1818.             dc.w                $2F3C
  1819.             dc.w                $0018
  1820.             dc.w                $0013
  1821.             moveq               #0,d0
  1822.             dc.w                $A82A
  1823.         EndM
  1824.     ELSE
  1825.         IMPORT_CFM_FUNCTION NAPickArrangement
  1826.     ENDIF
  1827.  
  1828. ;
  1829. ; pascal ComponentResult NASetDefaultMIDIInput(NoteAllocator ci, SynthesizerConnections *sc)
  1830. ;
  1831.     IF ¬ GENERATINGCFM THEN
  1832.         Macro
  1833.         _NASetDefaultMIDIInput
  1834.             dc.w                $2F3C
  1835.             dc.w                $0004
  1836.             dc.w                $0015
  1837.             moveq               #0,d0
  1838.             dc.w                $A82A
  1839.         EndM
  1840.     ELSE
  1841.         IMPORT_CFM_FUNCTION NASetDefaultMIDIInput
  1842.     ENDIF
  1843.  
  1844. ;
  1845. ; pascal ComponentResult NAGetDefaultMIDIInput(NoteAllocator ci, SynthesizerConnections *sc)
  1846. ;
  1847.     IF ¬ GENERATINGCFM THEN
  1848.         Macro
  1849.         _NAGetDefaultMIDIInput
  1850.             dc.w                $2F3C
  1851.             dc.w                $0004
  1852.             dc.w                $0016
  1853.             moveq               #0,d0
  1854.             dc.w                $A82A
  1855.         EndM
  1856.     ELSE
  1857.         IMPORT_CFM_FUNCTION NAGetDefaultMIDIInput
  1858.     ENDIF
  1859.  
  1860. ;
  1861. ; pascal ComponentResult NAUseDefaultMIDIInput(NoteAllocator ci, MusicMIDIReadHookUPP readHook, long refCon, unsigned long flags)
  1862. ;
  1863.     IF ¬ GENERATINGCFM THEN
  1864.         Macro
  1865.         _NAUseDefaultMIDIInput
  1866.             dc.w                $2F3C
  1867.             dc.w                $000C
  1868.             dc.w                $0019
  1869.             moveq               #0,d0
  1870.             dc.w                $A82A
  1871.         EndM
  1872.     ELSE
  1873.         IMPORT_CFM_FUNCTION NAUseDefaultMIDIInput
  1874.     ENDIF
  1875.  
  1876. ;
  1877. ; pascal ComponentResult NALoseDefaultMIDIInput(NoteAllocator ci)
  1878. ;
  1879.     IF ¬ GENERATINGCFM THEN
  1880.         Macro
  1881.         _NALoseDefaultMIDIInput
  1882.             dc.w                $2F3C
  1883.             dc.w                $0000
  1884.             dc.w                $001A
  1885.             moveq               #0,d0
  1886.             dc.w                $A82A
  1887.         EndM
  1888.     ELSE
  1889.         IMPORT_CFM_FUNCTION NALoseDefaultMIDIInput
  1890.     ENDIF
  1891.  
  1892. ;
  1893. ; pascal ComponentResult NAStuffToneDescription(NoteAllocator ci, long gmNumber, ToneDescription *td)
  1894. ;
  1895.     IF ¬ GENERATINGCFM THEN
  1896.         Macro
  1897.         _NAStuffToneDescription
  1898.             dc.w                $2F3C
  1899.             dc.w                $0008
  1900.             dc.w                $001B
  1901.             moveq               #0,d0
  1902.             dc.w                $A82A
  1903.         EndM
  1904.     ELSE
  1905.         IMPORT_CFM_FUNCTION NAStuffToneDescription
  1906.     ENDIF
  1907.  
  1908. ;
  1909. ; pascal ComponentResult NACopyrightDialog(NoteAllocator ci, PicHandle p, StringPtr author, StringPtr copyright, StringPtr other, StringPtr title, ModalFilterUPP filterProc, long refCon)
  1910. ;
  1911.     IF ¬ GENERATINGCFM THEN
  1912.         Macro
  1913.         _NACopyrightDialog
  1914.             dc.w                $2F3C
  1915.             dc.w                $001C
  1916.             dc.w                $001C
  1917.             moveq               #0,d0
  1918.             dc.w                $A82A
  1919.         EndM
  1920.     ELSE
  1921.         IMPORT_CFM_FUNCTION NACopyrightDialog
  1922.     ENDIF
  1923.  
  1924. ;
  1925. ;    kNADummyOneSelect = 29
  1926. ;    kNADummyTwoSelect = 30
  1927. ;
  1928. ;
  1929. ; pascal ComponentResult NAGetIndNoteChannel(NoteAllocator ci, long index, NoteChannel *nc, long *seed)
  1930. ;
  1931.     IF ¬ GENERATINGCFM THEN
  1932.         Macro
  1933.         _NAGetIndNoteChannel
  1934.             dc.w                $2F3C
  1935.             dc.w                $000C
  1936.             dc.w                $001F
  1937.             moveq               #0,d0
  1938.             dc.w                $A82A
  1939.         EndM
  1940.     ELSE
  1941.         IMPORT_CFM_FUNCTION NAGetIndNoteChannel
  1942.     ENDIF
  1943.  
  1944. ;
  1945. ; pascal ComponentResult NAGetMIDIPorts(NoteAllocator ci, Handle *inputPorts, Handle *outputPorts)
  1946. ;
  1947.     IF ¬ GENERATINGCFM THEN
  1948.         Macro
  1949.         _NAGetMIDIPorts
  1950.             dc.w                $2F3C
  1951.             dc.w                $0008
  1952.             dc.w                $0021
  1953.             moveq               #0,d0
  1954.             dc.w                $A82A
  1955.         EndM
  1956.     ELSE
  1957.         IMPORT_CFM_FUNCTION NAGetMIDIPorts
  1958.     ENDIF
  1959.  
  1960. ;
  1961. ; pascal ComponentResult NAGetNoteRequest(NoteAllocator ci, NoteChannel noteChannel, NoteRequest *nrOut)
  1962. ;
  1963.     IF ¬ GENERATINGCFM THEN
  1964.         Macro
  1965.         _NAGetNoteRequest
  1966.             dc.w                $2F3C
  1967.             dc.w                $0008
  1968.             dc.w                $0022
  1969.             moveq               #0,d0
  1970.             dc.w                $A82A
  1971.         EndM
  1972.     ELSE
  1973.         IMPORT_CFM_FUNCTION NAGetNoteRequest
  1974.     ENDIF
  1975.  
  1976. ;
  1977. ; pascal ComponentResult NASendMIDI(NoteAllocator ci, NoteChannel noteChannel, MusicMIDIPacket *mp)
  1978. ;
  1979.     IF ¬ GENERATINGCFM THEN
  1980.         Macro
  1981.         _NASendMIDI
  1982.             dc.w                $2F3C
  1983.             dc.w                $0008
  1984.             dc.w                $0023
  1985.             moveq               #0,d0
  1986.             dc.w                $A82A
  1987.         EndM
  1988.     ELSE
  1989.         IMPORT_CFM_FUNCTION NASendMIDI
  1990.     ENDIF
  1991.  
  1992. ;
  1993. ; pascal ComponentResult NAPickEditInstrument(NoteAllocator ci, ModalFilterUPP filterProc, StringPtr prompt, long refCon, NoteChannel nc, AtomicInstrument ai, long flags)
  1994. ;
  1995.     IF ¬ GENERATINGCFM THEN
  1996.         Macro
  1997.         _NAPickEditInstrument
  1998.             dc.w                $2F3C
  1999.             dc.w                $0018
  2000.             dc.w                $0024
  2001.             moveq               #0,d0
  2002.             dc.w                $A82A
  2003.         EndM
  2004.     ELSE
  2005.         IMPORT_CFM_FUNCTION NAPickEditInstrument
  2006.     ENDIF
  2007.  
  2008. ;
  2009. ; pascal ComponentResult NANewNoteChannelFromAtomicInstrument(NoteAllocator ci, AtomicInstrumentPtr instrument, long flags, NoteChannel *outChannel)
  2010. ;
  2011.     IF ¬ GENERATINGCFM THEN
  2012.         Macro
  2013.         _NANewNoteChannelFromAtomicInstrument
  2014.             dc.w                $2F3C
  2015.             dc.w                $000C
  2016.             dc.w                $0025
  2017.             moveq               #0,d0
  2018.             dc.w                $A82A
  2019.         EndM
  2020.     ELSE
  2021.         IMPORT_CFM_FUNCTION NANewNoteChannelFromAtomicInstrument
  2022.     ENDIF
  2023.  
  2024. ;
  2025. ; pascal ComponentResult NASetAtomicInstrument(NoteAllocator ci, NoteChannel noteChannel, AtomicInstrumentPtr instrument, long flags)
  2026. ;
  2027.     IF ¬ GENERATINGCFM THEN
  2028.         Macro
  2029.         _NASetAtomicInstrument
  2030.             dc.w                $2F3C
  2031.             dc.w                $000C
  2032.             dc.w                $0026
  2033.             moveq               #0,d0
  2034.             dc.w                $A82A
  2035.         EndM
  2036.     ELSE
  2037.         IMPORT_CFM_FUNCTION NASetAtomicInstrument
  2038.     ENDIF
  2039.  
  2040. ;
  2041. ; pascal ComponentResult NAGetKnob(NoteAllocator ci, NoteChannel noteChannel, long knobNumber, long *knobValue)
  2042. ;
  2043.     IF ¬ GENERATINGCFM THEN
  2044.         Macro
  2045.         _NAGetKnob
  2046.             dc.w                $2F3C
  2047.             dc.w                $000C
  2048.             dc.w                $0028
  2049.             moveq               #0,d0
  2050.             dc.w                $A82A
  2051.         EndM
  2052.     ELSE
  2053.         IMPORT_CFM_FUNCTION NAGetKnob
  2054.     ENDIF
  2055.  
  2056. ;
  2057. ; pascal ComponentResult NATask(NoteAllocator ci)
  2058. ;
  2059.     IF ¬ GENERATINGCFM THEN
  2060.         Macro
  2061.         _NATask
  2062.             dc.w                $2F3C
  2063.             dc.w                $0000
  2064.             dc.w                $0029
  2065.             moveq               #0,d0
  2066.             dc.w                $A82A
  2067.         EndM
  2068.     ELSE
  2069.         IMPORT_CFM_FUNCTION NATask
  2070.     ENDIF
  2071.  
  2072. ;
  2073. ; pascal ComponentResult NASetNoteChannelBalance(NoteAllocator ci, NoteChannel noteChannel, long balance)
  2074. ;
  2075.     IF ¬ GENERATINGCFM THEN
  2076.         Macro
  2077.         _NASetNoteChannelBalance
  2078.             dc.w                $2F3C
  2079.             dc.w                $0008
  2080.             dc.w                $002A
  2081.             moveq               #0,d0
  2082.             dc.w                $A82A
  2083.         EndM
  2084.     ELSE
  2085.         IMPORT_CFM_FUNCTION NASetNoteChannelBalance
  2086.     ENDIF
  2087.  
  2088. ;
  2089. ; pascal ComponentResult NASetInstrumentNumberInterruptSafe(NoteAllocator ci, NoteChannel noteChannel, long instrumentNumber)
  2090. ;
  2091.     IF ¬ GENERATINGCFM THEN
  2092.         Macro
  2093.         _NASetInstrumentNumberInterruptSafe
  2094.             dc.w                $2F3C
  2095.             dc.w                $0008
  2096.             dc.w                $002B
  2097.             moveq               #0,d0
  2098.             dc.w                $A82A
  2099.         EndM
  2100.     ELSE
  2101.         IMPORT_CFM_FUNCTION NASetInstrumentNumberInterruptSafe
  2102.     ENDIF
  2103.  
  2104. ;
  2105. ; pascal ComponentResult NASetNoteChannelSoundLocalization(NoteAllocator ci, NoteChannel noteChannel, Handle data)
  2106. ;
  2107.     IF ¬ GENERATINGCFM THEN
  2108.         Macro
  2109.         _NASetNoteChannelSoundLocalization
  2110.             dc.w                $2F3C
  2111.             dc.w                $0008
  2112.             dc.w                $002C
  2113.             moveq               #0,d0
  2114.             dc.w                $A82A
  2115.         EndM
  2116.     ELSE
  2117.         IMPORT_CFM_FUNCTION NASetNoteChannelSoundLocalization
  2118.     ENDIF
  2119.  
  2120.  
  2121. kTuneQueueDepth                    EQU        8                    ; Deepest you can queue tune segments 
  2122. TuneStatus                RECORD 0
  2123. tune                     ds.l    1                ; offset: $0 (0)        ;  currently playing tune 
  2124. tunePtr                     ds.l    1                ; offset: $4 (4)        ;  position within currently playing piece 
  2125. time                     ds.l    1                ; offset: $8 (8)        ;  current tune time 
  2126. queueCount                 ds.w    1                ; offset: $C (12)        ;  how many pieces queued up? 
  2127. queueSpots                 ds.w    1                ; offset: $E (14)        ;  How many more tunepieces can be queued 
  2128. queueTime                 ds.l    1                ; offset: $10 (16)        ;  How much time is queued up? (can be very inaccurate) 
  2129. reserved                 ds.l    3                ; offset: $14 (20)
  2130. sizeof                     EQU *                    ; size:   $20 (32)
  2131.                         ENDR
  2132. ; typedef ComponentInstance             TunePlayer
  2133.  
  2134.  
  2135. kTunePlayerType                    EQU        'tune'
  2136. ;
  2137. ; pascal ComponentResult TuneSetHeader(TunePlayer tp, unsigned long *header)
  2138. ;
  2139.     IF ¬ GENERATINGCFM THEN
  2140.         Macro
  2141.         _TuneSetHeader
  2142.             dc.w                $2F3C
  2143.             dc.w                $0004
  2144.             dc.w                $0004
  2145.             moveq               #0,d0
  2146.             dc.w                $A82A
  2147.         EndM
  2148.     ELSE
  2149.         IMPORT_CFM_FUNCTION TuneSetHeader
  2150.     ENDIF
  2151.  
  2152. ;
  2153. ; pascal ComponentResult TuneGetTimeBase(TunePlayer tp, TimeBase *tb)
  2154. ;
  2155.     IF ¬ GENERATINGCFM THEN
  2156.         Macro
  2157.         _TuneGetTimeBase
  2158.             dc.w                $2F3C
  2159.             dc.w                $0004
  2160.             dc.w                $0005
  2161.             moveq               #0,d0
  2162.             dc.w                $A82A
  2163.         EndM
  2164.     ELSE
  2165.         IMPORT_CFM_FUNCTION TuneGetTimeBase
  2166.     ENDIF
  2167.  
  2168. ;
  2169. ; pascal ComponentResult TuneSetTimeScale(TunePlayer tp, TimeScale scale)
  2170. ;
  2171.     IF ¬ GENERATINGCFM THEN
  2172.         Macro
  2173.         _TuneSetTimeScale
  2174.             dc.w                $2F3C
  2175.             dc.w                $0004
  2176.             dc.w                $0006
  2177.             moveq               #0,d0
  2178.             dc.w                $A82A
  2179.         EndM
  2180.     ELSE
  2181.         IMPORT_CFM_FUNCTION TuneSetTimeScale
  2182.     ENDIF
  2183.  
  2184. ;
  2185. ; pascal ComponentResult TuneGetTimeScale(TunePlayer tp, TimeScale *scale)
  2186. ;
  2187.     IF ¬ GENERATINGCFM THEN
  2188.         Macro
  2189.         _TuneGetTimeScale
  2190.             dc.w                $2F3C
  2191.             dc.w                $0004
  2192.             dc.w                $0007
  2193.             moveq               #0,d0
  2194.             dc.w                $A82A
  2195.         EndM
  2196.     ELSE
  2197.         IMPORT_CFM_FUNCTION TuneGetTimeScale
  2198.     ENDIF
  2199.  
  2200. ;
  2201. ; pascal ComponentResult TuneGetIndexedNoteChannel(TunePlayer tp, long i, NoteChannel *nc)
  2202. ;
  2203.     IF ¬ GENERATINGCFM THEN
  2204.         Macro
  2205.         _TuneGetIndexedNoteChannel
  2206.             dc.w                $2F3C
  2207.             dc.w                $0008
  2208.             dc.w                $0008
  2209.             moveq               #0,d0
  2210.             dc.w                $A82A
  2211.         EndM
  2212.     ELSE
  2213.         IMPORT_CFM_FUNCTION TuneGetIndexedNoteChannel
  2214.     ENDIF
  2215.  
  2216. ;  Values for when to start. 
  2217.  
  2218. kTuneStartNow                    EQU        1                    ; start after buffer is implied 
  2219. kTuneDontClipNotes                EQU        2                    ; allow notes to finish their durations outside sample 
  2220. kTuneExcludeEdgeNotes            EQU        4                    ; dont play notes that start at end of tune 
  2221. kTuneQuickStart                    EQU        8                    ; Leave all the controllers where they are, ignore start time 
  2222. kTuneLoopUntil                    EQU        16                    ; loop a queued tune if there's nothing else in the queue 
  2223. kTuneStartNewMaster                EQU        16384
  2224. ;
  2225. ; pascal ComponentResult TuneQueue(TunePlayer tp, unsigned long *tune, Fixed tuneRate, unsigned long tuneStartPosition, unsigned long tuneStopPosition, unsigned long queueFlags, TuneCallBackUPP callBackProc, long refCon)
  2226. ;
  2227.     IF ¬ GENERATINGCFM THEN
  2228.         Macro
  2229.         _TuneQueue
  2230.             dc.w                $2F3C
  2231.             dc.w                $001C
  2232.             dc.w                $000A
  2233.             moveq               #0,d0
  2234.             dc.w                $A82A
  2235.         EndM
  2236.     ELSE
  2237.         IMPORT_CFM_FUNCTION TuneQueue
  2238.     ENDIF
  2239.  
  2240. ;
  2241. ; pascal ComponentResult TuneInstant(TunePlayer tp, void *tune, long tunePosition)
  2242. ;
  2243.     IF ¬ GENERATINGCFM THEN
  2244.         Macro
  2245.         _TuneInstant
  2246.             dc.w                $2F3C
  2247.             dc.w                $0008
  2248.             dc.w                $000B
  2249.             moveq               #0,d0
  2250.             dc.w                $A82A
  2251.         EndM
  2252.     ELSE
  2253.         IMPORT_CFM_FUNCTION TuneInstant
  2254.     ENDIF
  2255.  
  2256. ;
  2257. ; pascal ComponentResult TuneGetStatus(TunePlayer tp, TuneStatus *status)
  2258. ;
  2259.     IF ¬ GENERATINGCFM THEN
  2260.         Macro
  2261.         _TuneGetStatus
  2262.             dc.w                $2F3C
  2263.             dc.w                $0004
  2264.             dc.w                $000C
  2265.             moveq               #0,d0
  2266.             dc.w                $A82A
  2267.         EndM
  2268.     ELSE
  2269.         IMPORT_CFM_FUNCTION TuneGetStatus
  2270.     ENDIF
  2271.  
  2272. ;  Values for stopping. 
  2273.  
  2274. kTuneStopFade                    EQU        1                    ; do a quick, synchronous fadeout 
  2275. kTuneStopSustain                EQU        2                    ; don't silece notes 
  2276. kTuneStopInstant                EQU        4                    ; silence notes fast (else, decay them) 
  2277. kTuneStopReleaseChannels        EQU        8                    ; afterwards, let the channels go 
  2278. ;
  2279. ; pascal ComponentResult TuneStop(TunePlayer tp, long stopFlags)
  2280. ;
  2281.     IF ¬ GENERATINGCFM THEN
  2282.         Macro
  2283.         _TuneStop
  2284.             dc.w                $2F3C
  2285.             dc.w                $0004
  2286.             dc.w                $000D
  2287.             moveq               #0,d0
  2288.             dc.w                $A82A
  2289.         EndM
  2290.     ELSE
  2291.         IMPORT_CFM_FUNCTION TuneStop
  2292.     ENDIF
  2293.  
  2294. ;
  2295. ; pascal ComponentResult TuneSetVolume(TunePlayer tp, Fixed volume)
  2296. ;
  2297.     IF ¬ GENERATINGCFM THEN
  2298.         Macro
  2299.         _TuneSetVolume
  2300.             dc.w                $2F3C
  2301.             dc.w                $0004
  2302.             dc.w                $0010
  2303.             moveq               #0,d0
  2304.             dc.w                $A82A
  2305.         EndM
  2306.     ELSE
  2307.         IMPORT_CFM_FUNCTION TuneSetVolume
  2308.     ENDIF
  2309.  
  2310. ;
  2311. ; pascal ComponentResult TuneGetVolume(TunePlayer tp)
  2312. ;
  2313.     IF ¬ GENERATINGCFM THEN
  2314.         Macro
  2315.         _TuneGetVolume
  2316.             dc.w                $2F3C
  2317.             dc.w                $0000
  2318.             dc.w                $0011
  2319.             moveq               #0,d0
  2320.             dc.w                $A82A
  2321.         EndM
  2322.     ELSE
  2323.         IMPORT_CFM_FUNCTION TuneGetVolume
  2324.     ENDIF
  2325.  
  2326. ;
  2327. ; pascal ComponentResult TunePreroll(TunePlayer tp)
  2328. ;
  2329.     IF ¬ GENERATINGCFM THEN
  2330.         Macro
  2331.         _TunePreroll
  2332.             dc.w                $2F3C
  2333.             dc.w                $0000
  2334.             dc.w                $0012
  2335.             moveq               #0,d0
  2336.             dc.w                $A82A
  2337.         EndM
  2338.     ELSE
  2339.         IMPORT_CFM_FUNCTION TunePreroll
  2340.     ENDIF
  2341.  
  2342. ;
  2343. ; pascal ComponentResult TuneUnroll(TunePlayer tp)
  2344. ;
  2345.     IF ¬ GENERATINGCFM THEN
  2346.         Macro
  2347.         _TuneUnroll
  2348.             dc.w                $2F3C
  2349.             dc.w                $0000
  2350.             dc.w                $0013
  2351.             moveq               #0,d0
  2352.             dc.w                $A82A
  2353.         EndM
  2354.     ELSE
  2355.         IMPORT_CFM_FUNCTION TuneUnroll
  2356.     ENDIF
  2357.  
  2358. ;
  2359. ; pascal ComponentResult TuneSetNoteChannels(TunePlayer tp, unsigned long count, NoteChannel *noteChannelList, TunePlayCallBackUPP playCallBackProc, long refCon)
  2360. ;
  2361.     IF ¬ GENERATINGCFM THEN
  2362.         Macro
  2363.         _TuneSetNoteChannels
  2364.             dc.w                $2F3C
  2365.             dc.w                $0010
  2366.             dc.w                $0014
  2367.             moveq               #0,d0
  2368.             dc.w                $A82A
  2369.         EndM
  2370.     ELSE
  2371.         IMPORT_CFM_FUNCTION TuneSetNoteChannels
  2372.     ENDIF
  2373.  
  2374. ;
  2375. ; pascal ComponentResult TuneSetPartTranspose(TunePlayer tp, unsigned long part, long transpose, long velocityShift)
  2376. ;
  2377.     IF ¬ GENERATINGCFM THEN
  2378.         Macro
  2379.         _TuneSetPartTranspose
  2380.             dc.w                $2F3C
  2381.             dc.w                $000C
  2382.             dc.w                $0015
  2383.             moveq               #0,d0
  2384.             dc.w                $A82A
  2385.         EndM
  2386.     ELSE
  2387.         IMPORT_CFM_FUNCTION TuneSetPartTranspose
  2388.     ENDIF
  2389.  
  2390. ;
  2391. ; pascal NoteAllocator TuneGetNoteAllocator(TunePlayer tp)
  2392. ;
  2393.     IF ¬ GENERATINGCFM THEN
  2394.         Macro
  2395.         _TuneGetNoteAllocator
  2396.             dc.w                $2F3C
  2397.             dc.w                $0000
  2398.             dc.w                $0017
  2399.             moveq               #0,d0
  2400.             dc.w                $A82A
  2401.         EndM
  2402.     ELSE
  2403.         IMPORT_CFM_FUNCTION TuneGetNoteAllocator
  2404.     ENDIF
  2405.  
  2406. ;
  2407. ; pascal ComponentResult TuneSetSofter(TunePlayer tp, long softer)
  2408. ;
  2409.     IF ¬ GENERATINGCFM THEN
  2410.         Macro
  2411.         _TuneSetSofter
  2412.             dc.w                $2F3C
  2413.             dc.w                $0004
  2414.             dc.w                $0018
  2415.             moveq               #0,d0
  2416.             dc.w                $A82A
  2417.         EndM
  2418.     ELSE
  2419.         IMPORT_CFM_FUNCTION TuneSetSofter
  2420.     ENDIF
  2421.  
  2422. ;
  2423. ; pascal ComponentResult TuneTask(TunePlayer tp)
  2424. ;
  2425.     IF ¬ GENERATINGCFM THEN
  2426.         Macro
  2427.         _TuneTask
  2428.             dc.w                $2F3C
  2429.             dc.w                $0000
  2430.             dc.w                $0019
  2431.             moveq               #0,d0
  2432.             dc.w                $A82A
  2433.         EndM
  2434.     ELSE
  2435.         IMPORT_CFM_FUNCTION TuneTask
  2436.     ENDIF
  2437.  
  2438. ;
  2439. ; pascal ComponentResult TuneSetBalance(TunePlayer tp, long balance)
  2440. ;
  2441.     IF ¬ GENERATINGCFM THEN
  2442.         Macro
  2443.         _TuneSetBalance
  2444.             dc.w                $2F3C
  2445.             dc.w                $0004
  2446.             dc.w                $001A
  2447.             moveq               #0,d0
  2448.             dc.w                $A82A
  2449.         EndM
  2450.     ELSE
  2451.         IMPORT_CFM_FUNCTION TuneSetBalance
  2452.     ENDIF
  2453.  
  2454. ;
  2455. ; pascal ComponentResult TuneSetSoundLocalization(TunePlayer tp, Handle data)
  2456. ;
  2457.     IF ¬ GENERATINGCFM THEN
  2458.         Macro
  2459.         _TuneSetSoundLocalization
  2460.             dc.w                $2F3C
  2461.             dc.w                $0004
  2462.             dc.w                $001B
  2463.             moveq               #0,d0
  2464.             dc.w                $A82A
  2465.         EndM
  2466.     ELSE
  2467.         IMPORT_CFM_FUNCTION TuneSetSoundLocalization
  2468.     ENDIF
  2469.  
  2470. ;
  2471. ; pascal ComponentResult TuneSetHeaderWithSize(TunePlayer tp, unsigned long *header, unsigned long size)
  2472. ;
  2473.     IF ¬ GENERATINGCFM THEN
  2474.         Macro
  2475.         _TuneSetHeaderWithSize
  2476.             dc.w                $2F3C
  2477.             dc.w                $0008
  2478.             dc.w                $001C
  2479.             moveq               #0,d0
  2480.             dc.w                $A82A
  2481.         EndM
  2482.     ELSE
  2483.         IMPORT_CFM_FUNCTION TuneSetHeaderWithSize
  2484.     ENDIF
  2485.  
  2486. ; typedef unsigned long                 MusicOpWord
  2487.  
  2488. ; typedef unsigned long *                MusicOpWordPtr
  2489.  
  2490. ;
  2491. ;     QuickTime Music Track Event Formats:
  2492. ;
  2493. ;    At this time, QuickTime music tracks support 5 different event types -- REST events,
  2494. ;    short NOTE events, short CONTROL events, short GENERAL events, Long NOTE events, 
  2495. ;    long CONTROL events, and variable GENERAL events.
  2496. ;        • REST Event (4 bytes/event):
  2497. ;    
  2498. ;            (0 0 0) (5-bit UNUSED) (24-bit Rest Duration)
  2499. ;        
  2500. ;        • Short NOTE Events (4 bytes/event):
  2501. ;    
  2502. ;            (0 0 1) (5-bit Part) (6-bit Pitch) (7-bit Volume) (11-bit Duration)
  2503. ;        
  2504. ;            where:    Pitch is offset by 32 (Actual pitch = pitch field + 32)
  2505. ;
  2506. ;        • Short CONTROL Events (4 bytes/event):
  2507. ;    
  2508. ;            (0 1 0) (5-bit Part) (8-bit Controller) (1-bit UNUSED) (1-bit Sign) (7-bit MSB) (7-bit LSB)
  2509. ;                                                                         ( or 15-bit Signed Value)
  2510. ;        • Short GENERAL Event (4 bytes/event):
  2511. ;    
  2512. ;            (0 1 1) (1-bit UNUSED) (12-bit Sub-Type) (16-bit Value)
  2513. ;    
  2514. ;        • Long NOTE Events (8 bytes/event):
  2515. ;    
  2516. ;            (1 0 0 1) (12-bit Part) (1-bit UNUSED) (7-bit Pitch) (1-bit UNUSED) (7-bit Volume)
  2517. ;            (1 0) (8-bit UNUSED) (22-bit Duration)
  2518. ;        
  2519. ;        • Long CONTROL Event (8 bytes/event):
  2520. ;        
  2521. ;            (1 0 1 0) (12-bit Part) (16-bit Value MSB) 
  2522. ;            (1 0) (14-bit Controller) (16-bit Value LSB)
  2523. ;    
  2524. ;        • Long KNOB Event (8 bytes/event):
  2525. ;    
  2526. ;            (1 0 1 1) (12-bit Sub-Type) (16-bit Value MSB)
  2527. ;            (1 0) (14-bit KNOB) (16-bit Value LSB)
  2528. ;    
  2529. ;        • Variable GENERAL Length Events (N bytes/event):
  2530. ;    
  2531. ;            (1 1 1 1) (12-bit Sub-Type) (16-bit Length)
  2532. ;                :
  2533. ;            (32-bit Data values)
  2534. ;                :
  2535. ;            (1 1) (14-bit UNUSED) (16-bit Length)
  2536. ;    
  2537. ;            where:    Length field is the number of LONG words in the record.
  2538. ;                    Lengths include the first and last long words (Minimum length = 2)
  2539. ;                
  2540. ;    The following event type values have not been used yet and are reserved for 
  2541. ;    future expansion:
  2542. ;        
  2543. ;        • (1 0 0 0)        (8 bytes/event)
  2544. ;        • (1 1 0 0)        (N bytes/event)
  2545. ;        • (1 1 0 1)        (N bytes/event)
  2546. ;        • (1 1 1 0)        (N bytes/event)
  2547. ;        
  2548. ;    For all events, the following generalizations apply:
  2549. ;    
  2550. ;        -    All duration values are specified in Millisecond units.
  2551. ;        -     Pitch values are intended to map directly to the MIDI key numbers.
  2552. ;        -    Controllers from 0 to 127 correspond to the standard MIDI controllers.
  2553. ;            Controllers greater than 127 correspond to other controls (i.e., Pitch Bend, 
  2554. ;            Key Pressure, and Channel Pressure).    
  2555. ;
  2556. ;  Defines for the implemented music event data fields
  2557.  
  2558. kRestEventType                    EQU        $00000000            ; lower 3-bits 
  2559. kNoteEventType                    EQU        $00000001            ; lower 3-bits 
  2560. kControlEventType                EQU        $00000002            ; lower 3-bits 
  2561. kMarkerEventType                EQU        $00000003            ; lower 3-bits 
  2562. kUndefined1EventType            EQU        $00000008            ; 4-bits 
  2563. kXNoteEventType                    EQU        $00000009            ; 4-bits 
  2564. kXControlEventType                EQU        $0000000A            ; 4-bits 
  2565. kKnobEventType                    EQU        $0000000B            ; 4-bits 
  2566. kUndefined2EventType            EQU        $0000000C            ; 4-bits 
  2567. kUndefined3EventType            EQU        $0000000D            ; 4-bits 
  2568. kUndefined4EventType            EQU        $0000000E            ; 4-bits 
  2569. kGeneralEventType                EQU        $0000000F            ; 4-bits 
  2570. kXEventLengthBits                EQU        $00000002            ; 2 bits: indicates 8-byte event record 
  2571. kGeneralEventLengthBits            EQU        $00000003            ; 2 bits: indicates variable length event record 
  2572. kEventLen                        EQU        1                    ; length of events in long words 
  2573. kXEventLen                        EQU        2
  2574. kRestEventLen                    EQU        1                    ; length of events in long words 
  2575. kNoteEventLen                    EQU        1
  2576. kControlEventLen                EQU        1
  2577. kMarkerEventLen                    EQU        1
  2578. kXNoteEventLen                    EQU        2
  2579. kXControlEventLen                EQU        2
  2580. kGeneralEventLen                EQU        2                    ; 2 or more, however 
  2581.                                                             ; Universal Event Defines
  2582. kEventLengthFieldPos            EQU        30                    ; by looking at these two bits of the 1st or last word              
  2583. kEventLengthFieldWidth            EQU        2                    ; of an event you can determine the event length                      
  2584.                                                             ; length field: 0 & 1 => 1 long; 2 => 2 longs; 3 => variable length 
  2585. kEventTypeFieldPos                EQU        29                    ; event type field for short events 
  2586. kEventTypeFieldWidth            EQU        3                    ; short type is 3 bits 
  2587. kXEventTypeFieldPos                EQU        28                    ; event type field for extended events 
  2588. kXEventTypeFieldWidth            EQU        4                    ; extended type is 4 bits 
  2589. kEventPartFieldPos                EQU        24
  2590. kEventPartFieldWidth            EQU        5
  2591. kXEventPartFieldPos                EQU        16                    ; in the 1st long word 
  2592. kXEventPartFieldWidth            EQU        12                    ; Rest Events
  2593. kRestEventDurationFieldPos        EQU        0
  2594. kRestEventDurationFieldWidth    EQU        24
  2595. kRestEventDurationMax            EQU        $00FFFFFF            ; Note Events
  2596. kNoteEventPitchFieldPos            EQU        18
  2597. kNoteEventPitchFieldWidth        EQU        6
  2598. kNoteEventPitchOffset            EQU        32                    ; add to value in pitch field to get actual pitch 
  2599. kNoteEventVolumeFieldPos        EQU        11
  2600. kNoteEventVolumeFieldWidth        EQU        7
  2601. kNoteEventVolumeOffset            EQU        0                    ; add to value in volume field to get actual volume 
  2602. kNoteEventDurationFieldPos        EQU        0
  2603. kNoteEventDurationFieldWidth    EQU        11
  2604. kNoteEventDurationMax            EQU        $000007FF
  2605. kXNoteEventPitchFieldPos        EQU        0                    ; in the 1st long word 
  2606. kXNoteEventPitchFieldWidth        EQU        16
  2607. kXNoteEventDurationFieldPos        EQU        0                    ; in the 2nd long word 
  2608. kXNoteEventDurationFieldWidth    EQU        22
  2609. kXNoteEventDurationMax            EQU        $003FFFFF
  2610. kXNoteEventVolumeFieldPos        EQU        22                    ; in the 2nd long word 
  2611. kXNoteEventVolumeFieldWidth        EQU        7                    ; Control Events
  2612. kControlEventControllerFieldPos    EQU        16
  2613. kControlEventControllerFieldWidth EQU    8
  2614. kControlEventValueFieldPos        EQU        0
  2615. kControlEventValueFieldWidth    EQU        16
  2616. kXControlEventControllerFieldPos EQU    0                    ; in the 2nd long word 
  2617. kXControlEventControllerFieldWidth EQU    16
  2618. kXControlEventValueFieldPos        EQU        0                    ; in the 1st long word 
  2619. kXControlEventValueFieldWidth    EQU        16                    ; Knob Events
  2620. kKnobEventValueHighFieldPos        EQU        0                    ; 1st long word 
  2621. kKnobEventValueHighFieldWidth    EQU        16
  2622. kKnobEventKnobFieldPos            EQU        16                    ; 2nd long word 
  2623. kKnobEventKnobFieldWidth        EQU        14
  2624. kKnobEventValueLowFieldPos        EQU        0                    ; 2nd long word 
  2625. kKnobEventValueLowFieldWidth    EQU        16                    ; Marker Events
  2626. kMarkerEventSubtypeFieldPos        EQU        16
  2627. kMarkerEventSubtypeFieldWidth    EQU        8
  2628. kMarkerEventValueFieldPos        EQU        0
  2629. kMarkerEventValueFieldWidth        EQU        16                    ; General Events
  2630. kGeneralEventSubtypeFieldPos    EQU        16                    ; in the last long word 
  2631. kGeneralEventSubtypeFieldWidth    EQU        14
  2632. kGeneralEventLengthFieldPos        EQU        0                    ; in the 1st & last long words 
  2633. kGeneralEventLengthFieldWidth    EQU        16
  2634. ;  General Event Defined Types
  2635.  
  2636. kGeneralEventNoteRequest        EQU        1                    ; Encapsulates NoteRequest data structure 
  2637. kGeneralEventPartKey            EQU        4
  2638. kGeneralEventTuneDifference        EQU        5                    ; Contains a standard sequence, with end marker, for the tune difference of a sequence piece (halts QuickTime 2.0 Music) 
  2639. kGeneralEventAtomicInstrument    EQU        6                    ; Encapsulates AtomicInstrument record 
  2640. kGeneralEventKnob                EQU        7                    ; knobID/knobValue pairs; smallest event is 4 longs 
  2641. kGeneralEventMIDIChannel        EQU        8                    ; used in tune header, one longword identifies the midi channel it originally came from 
  2642. kGeneralEventPartChange            EQU        9                    ; used in tune sequence, one longword identifies the tune part which can now take over this part's note channel (similar to program change) (halts QuickTime 2.0 Music)
  2643. kGeneralEventNoOp                EQU        10                    ; guaranteed to do nothing and be ignored. (halts QuickTime 2.0 Music) 
  2644. kGeneralEventUsedNotes            EQU        11                    ; four longwords specifying which midi notes are actually used, 0..127 msb to lsb 
  2645. ;  Marker Event Defined Types        // marker is 60 ee vv vv in hex, where e = event type, and v = value
  2646.  
  2647. kMarkerEventEnd                    EQU        0                    ; marker type 0 means: value 0 - stop, value != 0 - ignore
  2648. kMarkerEventBeat                EQU        1                    ; value 0 = single beat; anything else is 65536ths-of-a-beat (quarter note)
  2649. kMarkerEventTempo                EQU        2                    ; value same as beat marker, but indicates that a tempo event should be computed (based on where the next beat or tempo marker is) and emitted upon export
  2650. ;  UPP call backs 
  2651.     ENDIF ; __QUICKTIMEMUSIC__ 
  2652.  
  2653.